본문 바로가기

Autohotkey강좌

Autohotkey #51 , 레지스트리 읽기/쓰기 활용하여 원하는 폴더에서 Command창 열기

반응형

https://youtu.be/B2RuonYlOb0

레지스트리에 특정 값을 읽거나 써야 할 일이 있을때, 직접 regedit.exe를 실행해서 해당 위치를 찾아서 읽거나 쓸 수 있는데, 이 작업들을 autohotkey에서도 진행할 수 있습니다. 

오늘 시험해 볼 내용은 파일 탐색기에서 특정 폴더를 마우스 우클릭하고서 뜨는 메뉴에 해당 폴더에서 command창을 새로이 띄우도록 하는 것입니다. 

실제로 한번 진행해 볼까요?

특정 폴더에서 command창을 열어서 작업을 하기 위해서는 다음의 과정이 필요합니다.

1) win+r => cmd.exe {enter}  ( 또는 시작-cmd입력하면 command창이라고 메뉴뜬것을 눌러서 실행)

2) cmd창에서 원하는 폴더명으로 디렉토리 변경 : cd /d d:\data

이 과정을 파일탐색기에서 해당 폴더명을 마우스 우클릭한 후에 뜨는 메뉴 위에서 2번째 "Cmd창 열기"를 선택하면 해당 폴더에서 cmd창이 뜨도록 하는 것입니다.

 

=> 실행결과는 아래와 같습니다.

이 과정을 진행하기 위해서는 registry파일을 건드려야 합니다. 

먼저 autohotkey에서 registry값을 읽고 쓰고 삭제하는 것을 배워 보겠습니다.

1) registry읽기

RegRead, OutputVar, KeyName , ValueName

원하는 KeyName을 읽어 올수도 있고, KeyName아래의 특정 ValuName을 읽어서 OutputVar에 저장합니다.

좀 쉽게 말해서 KeyName을 폴더라고 생각하고 ValueName을 파일이라고 생각하면 이해가 쉬울 수 있습니다.

반드시 그런게 아니고 그런 개념으로 이해만 하시죠. ValueName에 써야 하는 값은 파일에 저장된 내용이라고 이해하면 좀 낫지 않을까 쉽습니다.

예를 들어 아래 예제에서는 현재 사용하는 Windows의 현재버전(KeyName) 아래 저장된 ProgramFileDir이라는 ValueName을 읽어서 OutputVar에 저장하고 해당 값을 Msgbox로 띄우는 것입니다.

 

RegRead, OutputVar, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion, ProgramFilesDir
MsgBox, Program files are in: %OutputVar%

 

2) registry쓰기

RegWrite, ValueType, KeyName , ValueName, Value

registry에 쓸때는 해당 Value이 ValueType을 명시해야 합니다. ValueType의 종류는 다음과 같습니다.

REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ, REG_DWORD,  REG_BINARY.

보통은 REG_SZ로 사용하면 됩니다.

RegWrite, REG_SZ, HKEY_LOCAL_MACHINE\SOFTWARE\TestKey, MyValueName, Test Value

REG_SZ형태로 HKEY_LOCAL_MACHINE\SOFTWARE\TestKey아래에 있는 MyValueName에 Test Value를 쓴 것입니다.

 

3) registry 삭제하기

RegDelete, KeyName , ValueName

KeyName아래에 지워야 할 ValueName을 선택해 주면 됩니다.

 

이제 우리가 진행해야 할 command창을 특정 폴더에서 열려면 어떻게 해야 할까요?

일단 HKEY_CLASSES_ROOT\Folder\shell 아래에 내가 원하는 이름으로 명령어 이름을 줄 수 있고 그 하위에 command라는 KeyName을 만들면 자동으로 생성되는 (기본값)이라는 ValueName에 cmd.exe /k cd "%L"을 넣어 주면 우리가 생각하는 내용이 실행됩니다. 우리가 배운 내용대로 하면 어떻게 해야 할까요?

RegWrite, REG_SZ, HKEY_CLASSES_ROOT\Folder\shell\Cmd창열기\command,(기본값),cmd.exe /k cd "%L"이라고 넣어주면 되지 않을까요?  아래 실제 실행 결과를 보시죠. 좀 이상하죠? (기본값)이 두개가 생겨버렸습니다. 

실제 이 상태로는 원하는 내용이 실행되지 않고 오류가 납니다.

정확한 내용은 알아내지 못 했습니다만, 한글버전만의 오류일수도 있겠다 싶습니다. 어찌 되었든 우리가 원하는 내용을 얻으려면 어떻게 해야 할까요? 의지를 가지신 분은 본인이 직접 해 보시기를 추천드립니다.

성질이 급하신 분들은 아래 해결책을 참고하시죠. 의지를 가지신 분들을 위해 의도적으로 하얀색으로 표시해 두겠습니다. 아래 문장을 블럭을 잡고 읽어 보시면 알 수 있습니다. 

RegWrite, REG_SZ, HKEY_CLASSES_ROOT\Folder\shell\Cmd창열기\command,,cmd.exe /k cd "%L"

많이 어렵지는 않으시죠? 자 기본적인 문법은 알았으므로 이제 간단히 메뉴를 구성하고 한번 실행해 보시죠. 

아래와 같이 간단히 구성하겠습니다.

실행단추를 눌렀을때 사용할 내용은 위에서 만든 내용을 넣어 주면 되는데 일단 명령어 이름을 읽어와서 KeyValue 또는 ValueName등으로 넣어주어야 하겠고, 이어서 coomand라는 ValueName을 넣어주어야 하죠. 그리고 해당 Value를 넣어 주어야 하는데, 중간에 잠시 난간이 생깁니다. 직접 해 보시면 알게 되는데, 우선 string안에 "%L"을 포함시켜야 하는게 조금 어려울 수 있습니다. 여러가지 방법이 있겠지만 저는 2개로 나눠서 진행했습니다. 자세한 내용은 아래 script에서 확인하시기 바랍니다. 의지를 가지신 분들은 직접 도전해 보시기를 추천합니다. 

doscmd.ahk
0.00MB

 

다 귀찮고 실행파일만 원하시는 분들은 아래 실행 파일을 사용하시기 바랍니다. 한번 실행한 이후에는 다시 실행할 필요는 없습니다.

doscmd.exe
0.61MB

반응형