강좌 / 팁

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

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 - - -
1740 소프트웨어| Top 10 Uninstaller [12] 과객69 19381 2 02-14
1739 서버 / IT| 네이버 N드라이버..음악파일 바로바로 듣을수있네여.. [9] 하얀나비 20134 1 02-08
1738 윈 도 우| Windows 8 Administrator에서 세벌식 한글쓰기 [2] 베리타스 18954 0 02-07
1737 윈 도 우| 윈도우8 꾸미기 - 윈도우8 테마 패치하고 테마 적용하기 [7] JHRunning 27683 3 02-07
1736 윈 도 우| VHD(X) 자식 생성 스크립트 툴 [10] 노백 19953 4 02-04
1735 윈 도 우| PE에 드라이버 통합하기 (WIM 파일 압축 및 해제하기) [18] Wanderer 34050 23 02-02
1734 윈 도 우| 윈도우 스토어 지역설정 끄기 (쉬운 검색 비활성화) [2] Madeline 19831 3 02-01
1733 윈 도 우| 영문 폴더를 한글로 보이게 만들기 (실제로는 영문폴더) [2] ☆미친참새 19482 3 02-01
1732 윈 도 우| HDD들 절전상태일때 파일복사는 CTL+C,V로(오른쪽버튼 X) [1] 똘이아빠 16475 2 01-30
1731 소프트웨어| foobar 로 음악방송을 하는 방법 [13] 창문 20476 6 01-30
1730 소프트웨어| foobar 를 가장 최적화 하여 쓰는 방법 [34] 창문 28982 15 01-30
1729 소프트웨어| 중국판 EasyDRV 설치방법 [13] 초보에요 34432 15 01-29
1728 윈 도 우| WIN PE의 ISO파일 풀고 wim파일 만으로 SETTING 방법 [8] k-style 25081 13 01-29
1727 윈 도 우| Total Uninstall 등록팁 [5] 고독남 21067 3 01-29
1726 하드웨어| 더블 클릭되는 마우스 고치기(?) [6] 귀신 16226 2 01-29
1725 윈 도 우| 윈도우 7 자체 백업 기능으로 USB에 백업시 하드에서보다 ... [2] asklee 16311 0 01-29
1724 소프트웨어| 오픈캡쳐 최근버전 사용 팁 [5] 메리아 15615 2 01-26
» 윈 도 우| 명령창 숨겨서 실행하기 [2] poison 15405 1 01-26
1722 윈 도 우| [이미지, 추가사항] WIN PE의 ISO FILE SETTING 방법 [21] k-style 21825 12 01-23
1721 윈 도 우| lame mp3 codec 팝업으로 고생하시는분을 위해 [1] sky9 13686 1 01-22
XE1.11.6 Layout1.4.8