강좌 / 팁

윈 도 우 명령창 숨겨서 실행하기

2013.01.26 14:18

poison 조회:15405 추천:1

명령창을 숨겨서 실행하는 법을 찾다가 괜찮은 방법이 있어서 소개합니다.

결론적으로 얘기하면 VBScript 를 이용하는 것입니다.

 

HideWindow.vbs 란 파일을 만들어서 C:\Windows 폴더에 두었다면,

명령창이나 레지스트리에서

wscript.exe C:\Windows\HideWindow.vbs ?"원하는 명령"

?

을 등록해 사용하면 됩니다.

 

다음은 HideWindows.vbs 파일의 내용입니다.

---------------------------------------------

?

Dim WshShell, objArgs
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objArgs = WScript.Arguments

strReArgs = Replace(objArgs(0),"#",chr(34))
WshShell.Run ReplaceArgs, 0

Set WshShell = Nothing
Set objArgs = Nothing
WScript.Quit

----------------------------------------------

저도 잘 모르지만 아는 한도내에서 간단히 설명해보겠습니다. 이해가 안되는 부분은 검색해 보시면 훨씬 자세히 설명된 글들이 있어요.^^

 

Dim WshShell, objArgs

    변수를 선언하는 내용입니다. WshShell 이나 objArgs 이 변수명인데 임의로 정한 이름입니다.

    메모리 상에 저장할 공간을 마련해 둔다는 의미로 이해하시면 될 것 같습니다.

 

Set WshShell = WScript.CreateObject("WScript.Shell")

    위에서 선언한 변수 WshShell 에 값을 할당하는 내용입니다.

    WScript.CreateObject("WScript.Shell") 는 "WScript.Shell" 개체(Object) 를 생성하는 내용입니다.

    WScript 는 최상위 개체이고 그하위 개체를 사용하고자 할때에는 CreateObject 메서드(method) 를 통해

     개체를  생성한 다음 사용합니다.

     WScript.Shell 개체를 생성하는 이유는 창을 숨겨서 실행할 수 있는 Run 메서드가 이 개체에 속해 있기 때문입니다.

     WshShell 이라는 변수에 할당되는 것이 개체일 경우에는 Set 문을 사용합니다. 밑에 나오겠지만 개체가 아닌 경우에는

     Set 을 사용하지 않습니다.

 

Set objArgs = WScript.Arguments

    objArgs 라는 변수에  WScript.Arguments ( 인수들) 이라는 개체를 할당하는 내용입니다.

    Arguments 는 WScript 의 속성인데 개체를 반환하기 때문에 Set 문을 사용합니다.

    HideWindow.vbs 다음에 사용하는 내용이 여기에 속합니다.

    예를들어 "wscript.exe C:\Windows\HideWindow.vbs a b c d" 에서보면 뒤에 붙어있는 a b c d 가 인수들 입니다.

    인수들의 인덱스가 0번 부터 시작하기 때문에 0번 인수가 a, 1번 인수가 b, 2번 인수가 c, 3번 인수가 d입니다.

 

strReArgs = Replace(objArgs(0),"^",chr(34))

   strReArgs 라는 변수에 값을 할당하는 내용입니다.

   strReArgs 는 임의로 만든 변수명입니다.

   Replace 는 함수인데 어떤 일을하는 함수이냐면,뒤에 표시되어 있는 objArgs(0) 에서  # 문자를 chr(34)로 바꾸어주는 함수입니다.

   objArgs(0) 는 위에서 objArgs 에 WScript.Arguments 라는 인수들 개체를 할당했었는데 0번 인덱스를 지정해서 첫번째 인수를

   받아오는 것입니다.

   # 는 단순한 기호이고 제가 임의로 정한 것입니다.

   chr(34) 에서 chr 는 함수인데 뒤에 나온 숫자를 아스키 코드에 대응하여 바꾸어줍니다. 아스키코드 34 번은 " (큰따옴표)입니다.

   이러한 변환작업을 하는 이유는 VBScript 에서 인수를 받아올때 따옴표를 모두 제거하고 받아오기 때문에

   따옴표를 만들어 주기 위해서 이러한 작업이 필요합니다.

   예를 들어 ab cd.cmd 라는 공백이 들어 있는 배치파일이 있을때, wscript.exe C:\Windows\HideWindow.vbs "ab cd.cmd" 라는

   명령을 사용하면 위 VBScript 안에서는  WshShell.Run ab cd.cmd, 0 라는 명령이 되어서 실패하게 됩니다. (ab 라는 파일을 찾는 것이죠) 때문에 # 기호를 추가하여 따옴표로 바꿔주는 작업을 하는 것입니다.

   올바른 명령 사용은 wscript.exe C:\Windows\HideWindow.vbs "#ab cd.cmd#"입니다.

   모든 권한 얻기란 레지스트리를 예로들면 cmd.exe /c takeown /f "%1" && icacls "%1" /grant administrators:F 이란 명령이 있는데

   "%1" 에서 따옴표도 # 로 바꾸어서 사용하면 됩니다. wscript.exe C:\Windows\HideWindows.vbs "cmd.exe /c takeown /f ^%1^ && icacls #%1# /grant administrators:F" 로 등록하여 사용하면 됩니다.

 

WshShell.Run strReArgs, 0

    WshShell 은 WScript.Shell 을 받은 변수입니다.

    이 개체의 메서드중 하나인 Run 메서드는 창을 숨겨서 실행할 수 있는 옵션이 있습니다.

    strReArgs 는 인수들 중에서 첫번째 인수를 # 기호를 " 로 바꾼 내용을 받은 변수 입니다. 우리가 실행하고자하는 배치파일이나

   명령어가 들어가게 되죠.

   0 은 창을 숨겨서 실행하는 옵션입니다. 다른 옵션에 대해서는 검색으로...

 

Set WshShell = Nothing

    WshShell 변수에 Nothing 을 할당한다는 의미인데 한마디로 WshShell 변수에 할당했던 저장공간을 지우고 메모리에서 해제한다

    정도로 생각하면 될 것 같습니다.

 

WScript.Quit

    Quit 메서드는 스크립트를 종료시키는 명령입니다.

 

 

제가 변수를 선언하고 변수에 개체를 할당하고 했지만 어차피 한번만 사용되는 개체라면 변수에 할당할 필요없이 바로 사용해도 됩니다. 위에 사용한 코드를 아래와 같이 간단하게 줄여서 사용할 수도 있습니다.

 

-----------------------------------------------

strReArgs = replace(WScript.Arguments(0),"#",chr(34))
WScript.CreateObject("WScript.Shell").Run strReArgs, 0

-----------------------------------------------

 

<01.31 수정>

^ 기호를 # 기호로 수정합니다.

^ 기호가 필요한 곳이 있네요.;;

번호 제목 글쓴이 조회 추천 등록일
[공지] 강좌 작성간 참고해주세요 gooddew - - -
523 Windows 7 + 인터넷 익스플로러 8 뒤로가기 버튼 안될 때 [4] 낙장불입 15205 0 11-07
522 윈 도 우| 윈도우8 알면 좋은 팁 5가지 동영상 [4] wopd 15217 1 11-13
521 하드웨어| ASUS, Giga-byte, ECS 메인보드는 SLP 1.0이 이미 포함되어... gooddew 15240 0 06-17
520 하드웨어| USB 메모리를 하드디스크처럼 인식하도록 만들기 [5] DOS 15244 2 12-28
519 윈 도 우| 통합 ISO에서 원하는 이미지만 추출하기(통합) [25] suk 15247 14 04-25
518 하드웨어| 원격으로 컴퓨터 켜기 및 원격제어하기 2-2 [2] 지똥구리 15252 0 01-14
517 윈 도 우| Win 8 워터마크 . [1]     15252 0 09-22
516 VHD 자동 마운트 스크립트 [3] 김윈도 15278 0 07-03
515 윈 도 우| Windows.old 폴더를 이용해 이전 윈도우7으로 복구방법 [3] gooddew 15292 0 07-11
514 하드웨어| 윈7 스타크레프트 프리징 현상 해결 [1] 이건뭔가요 15305 0 11-01
513 소프트웨어| sysprep&vhd Ver 만들기 [13] 망나뇽 15325 1 12-27
512 Server 2008 oem 인증 참조 [8] 훈장할배 15327 0 10-13
511 윈 도 우| 며느리도 몰랐다 예약 파티션 없이 설치하기 [26] gooddew 15327 0 03-10
510 윈 도 우| 윈도우 7 라이센스 키를 찾을수 없다고 나올때 [2] 짱닌텐도 15368 0 03-02
509 윈도우즈 시작시 "환영합니다" 에서 딜레이현상 ... [17] 쪼도리 15373 0 08-14
508 하드웨어| 랩탑 수리 동영상. [23] Gliese 581 15374 1 09-27
507 하드웨어| Windows 7 에서 SSD 최적화 Trim 작동여부 확인법 [5] 미테니사키 15375 0 02-15
506 윈 도 우| 윈도우 7 무봉인 만능 고스트를 만들어 보자 [39] gooddew 15375 17 02-26
505 소프트웨어| 다음카페 펌방지 해제 UserScript (수정) [24] 초월신 15386 3 02-18
504 윈 도 우| office 2003 & 2010 동시 설치시 따로 열기 방법 [5] 티아프로 15401 0 04-27
XE1.11.6 Layout1.4.8