오늘 오토핫키 사이트에 가보니 정말 오랜만에 Autohotkey 업데이트를 했더군요.

기존에 Autohotkey 에서는 일반적으로 다른 컴퓨터 언어들에는 있는 switch case 문이 없었는데~ 이번에 업데이트가 되면서 Switch case, InputHook 기능이 추가 된 것을 확인할 수 있었습니다.

https://github.com/Lexikos/AutoHotkey_L/releases

https://www.autohotkey.com/docs/commands/Switch.htm

https://www.autohotkey.com/docs/commands/InputHook.htm

InputHook 관련 메뉴얼의 예문을 보다 보니 auto-complete 기능도 어느 정도 구현을 할 수 있더군요.

아래 포스팅에서 Autohotkey를 사용한 auto-complete 기능에 대해서 포스팅한 적이 있었는데~ InputHook 를 사용하여 구현을 한번 해 봐야 되겠네요~

https://iamaman.tistory.com/1142

https://iamaman.tistory.com/1318

Autohotkey 는 정말 사용하면 사용할수록 무궁무진한 가능성을 가지고 있는 것 같습니다.



아래 포스팅에서 Autohotkey를 사용하여 윈도우 환경변수를 여는 방법에 대해서 소개를 한 적이 있습니다.

https://iamaman.tistory.com/404

물론 저는 요즘은 직접 환경변수 창을 열어서 환경변수를 설정하기 보다는 아래의 포스팅에서 소개 했었던 Rapid Environment Editor 를 사용하여 환경 변수를 설정하는 편입니다.

https://iamaman.tistory.com/1213

윈도우를 사용하면서 정말 많은 설정들을 자주 바꾸게 되는데~ 그중에 하나가 “작업표시줄 자동 숨기기” 기능입니다. Autohotkey를 사용하는 분들은 아시겠지만 Autohotkey 를 사용하면 윈도우 사용의 대부분을 자동화 할 수가 있고~ 오늘은 “작업표시줄 자동 숨기기”를 Autohotkey 로 toggle 시키는 방법에 대해서 소개해 보려 합니다.

현재 제가 사용하는 컴퓨터의 운영체제는 윈도우 7 이고 “작업표시줄 자동 숨기기” 기능을 설정하기 위해서는 “작업 표시줄 및 시작 메뉴 속성” 창을 열어야 합니다. 해당 창은 아래 명령어를 통해서 열 수가 있습니다.

RunDLL32.EXE shell32.dll, Options_RunDLL 1

위 그림과 같이 Win + R 을 눌러서 실행 창을 열고 위 명령어를 실행시키면~ 아래와 같이 “작업 표시줄 및 시작 메뉴 속성” 창이 열립니다.

Autohotkey 에서 위 명령어를 실행하는 방법은 다음과 같습니다. 아래 명령어에서 주의할 부분은 중간에 있는 쉼표를 ` 를 사용하여 escaping 해 줬다는 것입니다.

Run, RunDLL32.EXE shell32.dll`, Options_RunDLL 1

“작업 표시줄 및 시작 메뉴 속성” 창이 열린 후 “작업표시줄 자동 숨기기” 를 toggle 시키기 위해서는 “작업표시줄 자동 숨기기” 가 현재 체크가 됐는지 안 됐는지를 확인해야 합니다. 해당 명령어는 아래와 같습니다.

ControlGet, autohide_unhide, Checked, , Button2, 작업 표시줄 및 시작 메뉴 속성 ahk_class #32770

체크가 되어 있으면 autohide_unhide 변수가 1 이 되고 ~ 체크가 안 되어 있으면 해당 변수가 0 이 됩니다. 따라서 autohide_unhide 변수가 1 이면 체크를 해제 해주고 autohide_unhide 변수가 0 이면 체크를 해주면 되겠죠.

해당 코드는 아래와 같습니다.

If autohide_unhide = 1

{

Control, Uncheck, , Button2, 작업 표시줄 및 시작 메뉴 속성 ahk_class #32770

}

Else

{

Control, Check, , Button2, 작업 표시줄 및 시작 메뉴 속성 ahk_class #32770

}

이제 설정을 다했으면 “작업 표시줄 및 시작 메뉴 속성” 창의 확인을 눌러 줘야 할 것입니다. 현재 제 컴퓨터에서 확인 버튼은 Button9 이고 확인을 눌러 주는 Autohotkey 코드는 다음과 같습니다.

ControlClick, Button9, 작업 표시줄 및 시작 메뉴 속성 ahk_class #32770, , Left, 1, NA

이제 중요한 코딩은 다 끝난 것 같습니다. 코드 사이에 적절히 Sleep 명령을 넣어 주기만 하면 완성 됩니다.

위에서 소개한 전체 코드는 아래 코드를 사용하시면 되겠습니다. 저는 해당 기능을 하는 단축키를 Ctrl + Win + H 로 설정을 했습니다. 원하시는 단축키로 적절히 바꿔서 사용해 보시기 바랍니다.

위 코드를 실행하고 단축키를 눌러보면 아래와 같이 동작하는 것을 확인할 수 있습니다. 재밌지 않나요? ㅎㅎㅎ




아래 포스팅에서 Autohotkey 의 argument 를 사용하는 방법에 대해 소개한 적이 있습니다. Autohotkey 에서 기존의 방법으로 argument 처리를 해 본 분들은 아시겠지만 %0%, %1% 등으로 표현이 되서 약간 이해가 쉽지 않았던게 사실 입니다.

https://iamaman.tistory.com/1635

그런데 최근에 아래 주소의 Autohotkey 문서를 다시 보다보니~ 1.1.27 버전 부터 A_Args 라는 키워드가 생긴것을 확인 할 수 있었습니다.

https://www.autohotkey.com/docs/Scripts.htm#cmd

이렇게 보니 이제 다른 프로그래밍 언어들과 그 사용방법이 거의 차이가 없는것 같네요~

Autohotkey help 문서에 있는 아래와 같은 예제를 한번 돌려보면 그냥 바로 이해가 되실 겁니다.

arg1 := A_Args[1] ; 첫번째 parameter

arglen := A_Args.Length() ; parameter 길이

MsgBox arg length : %arglen%

MsgBox arg1 : %arg1%

for n, param in A_Args ; For each parameter:

{

MsgBox Parameter number %n% is %param%.

}

위 코드에서 보시는 바와 같이 대괄호 인덱스를 사용하여 각 parameter 값을 얻을 수 있고~ Length() 함수를 통해 argument 의 갯수를 알 수 있습니다.

위 코드를 실행하기 위해서는 cmd 창이나 Powershell 과 같은 터미널에서 argument 를 줘야하는데~ 아래 그림과 같이 argument 들은 공백으로 구분을 하고 argument 에 공백이 포함된 경우에는 따옴표(“) 로 묶어 줘야 합니다.

그런데 이렇게 CMD 창에 실행하는건 불편하니까~ argument 가 있는 Autohotkey 코드를 개발 할 때는 scite4autohotkey 에서 View -> Parameters (Shift + F8)창을 열어서 사용하면 편리합니다. 


아래 화면은 보시는 바와 같이 3개의 argument 를 설정한 예입니다. Set 을 누르면 Parameters 창은 사라지고 scite4autohotkey 에디터에서 Run 을 눌러주면 해당 Parameters 들이 순서대로 입력 되게 됩니다.

argument 는 보통 Drag & Drop 을 통해서도 입력 할 수 있는데 위 링크의 문서를 보면 ~ NTFS 파일 시스템에서 8-dot-3 이름이 해제된 경우에는 Drag & Drop 이 실패 할수 있다고 하더군요. 이런 경우에는 해당 Autohotkey 파일을 compile 해서 실행파일(exe) 로 만들면 된다고 합니다.

8-dot-3 (short) name 이 뭔가 해서 검색을 조금 해 보니 오래된 도스 버전에서 사용하던 이름 규칙이라고 하네요.

https://ko.wikipedia.org/wiki/8.3_파일_이름

뭐 그럴일은 별로 없겠지만~ 아래 문서를 보니 fsutil.exe 를 사용하여 8-dot-3 (short) name 기능을 Enable, Disable 할 수 있다고 합니다.

https://support.microsoft.com/en-us/help/121007/how-to-disable-8-3-file-name-creation-on-ntfs-partitions



저는 현재 오토핫키를 사용하여 정말 다양한 단축키를 사용하고 있습니다. 오토핫키를 사용한지는 대략 8~9년 정도 된 거 같고~ 계속해서 오토핫키 코드가 누적 되다 보니 사용하는 코드 라인이 적어도 만 줄 이상은 되는 거 같네요. 자주 사용하는 단축키들은 손이 기억을 하지만 자주 사용하지 않는 단축키 같은 경우 시간이 오래되면 기억이 나지 않는 경우가 많이 있습니다.

물론 기억이 안 날 때는 코드를 확인하면 되겠지만 어떤 단축키가 있는지만 확인하고 싶을 때는 사실 일일이 코드를 확인할 필요가 없습니다. 오토핫키가 실행된 상태에서 아래 그림과 같이 마우스 오른쪽 버튼을 눌러서 open 버튼을 누르면 ~ 현재 실행된 오토핫키 프로그램에 대한 다양한 정보가 나타나는 새로운 창이 뜨게 됩니다.

해당 창의 View 메뉴에서 Hotkeys and their methods 또는 Ctrl + H 단축키를 통해 현재 스크립트에 설정된 단축키를 확인할 수 있습니다.

그런데 이러한 방식은 위에 설명한 바와 같이 몇 단계를 거치게 되므로 간단하게 단축키로 Hotkeys and their methods 창이 나타나도록 할 수가 있습니다.

Hotkeys and their methods 창은 ListHotkeys 라는 명령어를 통해서 접근 가능합니다.

오토핫키 스크립트 내에 아래와 같이 코딩을 한 후에~

F7:: ; shortcut F7

ListHotkeys

return

현재 설정된 단축키인 F7 을 누르면~ 아래와 같이 현재 스크립트 내에 단축키를 확인할 수 있는 Hotkeys and their methods 창이 나타나게 됩니다.



요즘은 학생들도 학교에서도 스크래치나 파이썬과 같은 프로그램을 배운다고 하고~ 어찌 보면 프로그래밍이 필수인 시대가 다가오고 있습니다. 물론 Python이나 스크래치같은 프로그램을 배우는 것도 좋지만~ 개인적으로는 모든 사람들이 프로그래머가 될게 아니기 때문에~ 바로 쓸모 있는 것을 만들 수 있는 실용적이고 재밌는 컴퓨터 언어를 배우는게 좋다고 생각합니다.

그래서 저는 항상 오토핫키를 추천을 드립니다. 물론 Autohotkey 는 윈도우 전용 프로그램이고 리눅스나 맥에서는 사용 할 수가 없기 때문에~ 해당 OS를 사용하시는 분들에게는 추천을 드릴 수가 없지만… 어쨌든 우리나라에서는 Windows 를 가장 많이 사용하기 때문에 오토핫키를 추천드리는 편입니다.

Autohotkey 를 사용하면 Windows 에서 정말 다양한 어찌 보면 대부분의 작업들을 자동화 할 수가 있는데~ 그 중에서 오늘은 오토핫키를 사용해서 메모장을 열고 해당 메모장을 현재 마우스 위치로 이동시키는 방법에 대해서 소개하려고 합니다. 일단 메모장을 여는 가장 기본적인 방법은 아래와 같습니다.

1. Win 버튼 누르고 메모장 검색 후 실행

2. Win + R 눌러서 실행 창 연 후에 notepad 명령어로 실행

3. launchy 를 통해 note 정도만 쳐서~ 메모장 실행

launchy 에 대해서 모르시는 분들은 아래 포스팅들 참조하시기 바랍니다.

https://iamaman.tistory.com/911

https://iamaman.tistory.com/1421

https://iamaman.tistory.com/2054

그냥 머리 속에 생각나는 방법은 위 세 가지 정도가 다네요~ 그런데 Windows 에서 이렇게 프로그램을 실행하면 창이 열리는 위치가 대부분이 제멋대로입니다. 그래서 저는 이런 부분이 조금 불편하더군요.

그래서 Autohotkey 를 사용하여 메모장을 실행 시킨 후에 마우스 위치로 이동시키는 방법에 대해서 소개 하려는 것입니다. 일단 코드는 아래와 같습니다.

코드에 주석을 달아 놨으니 이해 하시는데 큰 무리는 없을 거라고 생각을 합니다. Win + N 단축키를 누르면 메모장이 실행되고 위에 소개한 대로 마우스 위치로 이동하는 것을 보실 수가 있습니다.


간단하게 메모장을 여는 방법에 대해서 소개를 했지만~ 다른 프로그램들에도 응용을 해 보실 수 있을 겁니다.



  1. 잣나무 2019.08.27 19:48

    좋은 내용 감사합니다. ^^

프로그래밍 언어를 사용하여 파일의 path 를 다루는 경우 path 를 합치고 분리하고 하는 과정은 매우 흔한 일입니다.

일단 Autohotkey 를 사용하여 path를 나누는 경우는 SplitPath 라는 명령어를 사용하면 됩니다.

그런데 합치는 경우에는 딱히 전용 함수가 없어서 그냥 string 을 붙여서 만들어야 합니다. 물론 string 을 붙여넣는것도 괜찮지만 잡스러운 처리가 필요한 경우들이 종종 있습니다.

예를 들어 아래 두개의 path 를 그냥 붙이게 된다면~


base := A_WinDir . "\System32\"

rel := "..\Media\test.wav"

fullpath := base . rel ; string 붙이기

아래와 같이 표시가 될 것 입니다. 보시다시피 그냥 문자 붙이기 이므로 .. (점점) 등이 그대로 표시가 됩니다. 위 path 중 rel 변수의 ..(점점) 은 상위 폴더를 의미 하므로 path 를 붙이기 전에 그에 맞게 처리를 해 줘야 합니다.

이런 문제를 쉽게 해결하기 위해서 Windows 내부의 함수를 사용할 수 있고 path 를 붙여 주는 함수로 PathCombine 이라는 함수가 있습니다. 해당 함수는 Shlwapi.dll 파일에 들어 있으므로 DllCall 명령을 통해 사용할 수 있습니다. 해당 함수를 아래와 같이 함수로 만들어서 사용하면 편리할 것입니다.

PathCombine(abs, rel) {

VarSetCapacity(dest, (A_IsUnicode ? 2 : 1) * 300, 1) ; MAX PATH

DllCall("Shlwapi.dll\PathCombine", "UInt", &dest, "UInt", &abs, "UInt", &rel)

Return, dest

}

위 함수를 사용하여 아래와 같이 path 를 join 해 보면~

MsgBox, % PathCombine(base, rel)

아래와 같이 알아서 상위 폴더로 설정하고 path 를 붙여 주는 것을 확인 할 수 있습니다.

Autohotkey DllCall 사용 방법에 대해서는 아래 주소에 메뉴얼이 있으니 확인해 보시기 바랍니다.

https://www.autohotkey.com/docs/commands/DllCall.htm



Autohotkey 사용시 scite4autohotkey 를 사용하여 주로 편집을 하는데~ scite4autohotkey 는 너무나 좋지만 한가지 단점이 있습니다. 프로그램이 한 개만 실행되서 다른 Autohotkey 파일을 동시에 보거나 할수가 없다는 것입니다.

이런 문제들은 제 경험상 검색을 해보면 누군가는 항상 해결방법을 올려 놓더군요~ 그래서 검색을 해보니 아래 주소에서 답을 찾을 수 있었습니다.

https://www.autohotkey.com/boards/viewtopic.php?f=6&t=62&start=180#p24690

Joe Glines 라는 유저가 답변을 달아 놓은 것인데 Joe Glines 님은 Autohotkey 관련 유투브 채널도 있는것 같더군요. Autohotkey 유저들과의 인터뷰 내용이나 강좌 내용들을 볼 수 있습니다. 관심있는 분들은 한번쯤 방문해 보시기 바랍니다.

https://www.youtube.com/user/JoeGlines

scite4autohotkey 가 두 개 이상 실행되도록 설정하는 방법은 다음과 같습니다.

※ SciTEUser.properties 파일에 아래 내용을 추가 해 주면 scite4autohotkey 를 두 개이상 열 수 있습니다.

# Open multiple instances

command.name.17.*=Open in New Window

command.mode.17.*=subsystem:2

command.shortcut.17.*=Ctrl+Shift+N

command.17.*="$(SciteDefaultHome)\SciTE.exe" -check.if.already.open=0 -save.session=0 "$(FilePath)"

저는 “# Add here your own settings” 라고 된 부분 아래에 아래와 같이 코드를 넣었습니다.

위 코드에서 보시는 바와 같이 단축키는 Ctrl+Shift+N 으로 설정 되어 있으므로 Ctrl+Shift+N 을 누르면 새로운 scite4autohotkey 창이 나오는 것을 확인 할 수 있습니다. 단축키를 변경하고 싶으면 원하는 내용으로 변경하시면 될 겁니다.

scite4autohotkey 에서 위에서 소개한 단축키를 눌러보니 아래와 같이 scite4autohotkey 새로운 창이 열리는 것을 확인할 수 있었습니다.

※ SciTEUser.properties 파일의 위치는 컴퓨터에 따라서 조금씩 달랐는데 제가 사용하는 윈도우 컴퓨터들은 아래 주소에 있었습니다.

Windows 10

D:\Documents\AutoHotkey\SciTE\SciTEUser.properties

Windows 7

C:\Users\계정\Documents\AutoHotkey\SciTE\SciTEUser.properties



여러분들은 컴퓨터를 사용하면서 어떤 작업을 가장 많이 하시나요? 저는 개인적으로 생각하기에 복사 붙여넣기라고 생각을 합니다. 그래서 복사 붙여넣기를 잘 하는 것만으로도 컴퓨터 사용의 효율성은 분명히 올라간다고 생각합니다. 그래서 저는 아래 포스팅에서 소개를 했던 ditto 라는 복사 붙여넣기 툴과 Windows 10 에 들어있는 복사 붙여넣기 기능들을 적극적으로 사용하는 편입니다. 아래는 제가 지금까지 복사 붙여넣기와 관련된 포스팅을 한 것들인데 위에서 얘기했던 ditto 이외에도 Clipjump 와 같은 Autohotkey 로 만들어진 툴에 대해서도 소개를 하니 한번쯤 읽어 보시기 바랍니다.

https://iamaman.tistory.com/737

https://iamaman.tistory.com/2693

https://iamaman.tistory.com/1026

https://iamaman.tistory.com/948

https://iamaman.tistory.com/2566

오늘은 Autohotkey 를 사용하여 복사 붙여넣기를 하는 3 가지 방법에 대해서 소개를 하려고 합니다.

일단 Autohotkey 를 사용하는 대부분의 분들이 아시겠지만 send 명령을 사용하여 복사 붙여넣기를 할 수가 있습니다. 실험 결과로 부터 원하는 계산을 한 후에 결과를 메모장에 붙여넣기하는 경우 아래와 같이 단축키를 만들어서 메모장에 자동으로 붙여넣기 할 수가 있습니다.

1. send 명령을 사용하는 방법

#!v:: ; shortcut Win + Alt + v

WinActivate, 제목 없음 - 메모장 ahk_class Notepad,

Send, ^v{Enter}

return

위 단축키는 Win + Alt + v 를 눌렀을 때 “제목 없음 - 메모장” 타이틀을 가진 메모장 프로그램에 ctrl + v 를 누르고 Enter 를 눌러서 줄 바꿈을 해주는 단축키입니다. 보시는 바와 같이 굉장히 간단하게 메모장에 붙여넣기를 할 수가 있습니다.

2. controlsend 를 사용하는 방법

#!c:: ; shortcut Win + Alt + c

ControlSend, Edit1, %Clipboard%`n, 제목 없음 - 메모장 ahk_class Notepad,

return

위 단축키는 Win + Alt + c 를 눌렀을 때 “제목 없음 - 메모장” 타이틀을 가진 메모장 프로그램의 Edit1 Control 에 클립보드의 내용과 줄바꿈을 넣는 단축키입니다.

3. PostMessage / SendMessage를 사용하는 방법

#!p:: ; shortcut Win + Alt + p

postmessage, 0x302, 1, 0, Edit1, 제목 없음 - 메모장 ahk_class Notepad,

return

마지막으로 설명드릴 내용은 PostMessage / SendMessage 를 사용하는 방법입니다. 윈도우 메시지를 전달하는 방법인데 위에서 소개했던 ControlSend 명령이나 PostMessage / SendMessage 명령은 비활성창에도 명령을 실행시킬 수 있기 때문에 send 명령보다 조금 더 편리할 수 있습니다. 하지만 그만큼 조금 더 공부할 거리들이 있는 것은 사실입니다. 어쨌든 위에서 소개한 스크립트는 Win + Alt + p 단축키를 누르면 마찬가지로 클립보드의 내용을 메모장에 붙여넣기하는 스크립트입니다.

추가로 PostMessage / SendMessage 를 사용하여 잘라내기와 복사하기를 하는 명령어는 아래와 같으니 참조하시기 바랍니다.

잘라내기 : postmessage, 0x300, 1, 0, Edit1, 제목 없음 - 메모장

복사 : postmessage, 0x301, 1, 0, Edit1, 제목 없음 - 메모장

오늘은 Autohotkey 를 사용하여 복사 / 붙여넣기를 하는 세 가지 방법에 대해서 소개를 했습니다. 서두에서 말씀드린 바와 같이 복사 / 붙여넣기만 잘 해도 정말 큰 업무 효율 향상을 볼 수가 있다고 생각합니다. 요즘은 4차 산업 혁명 시대라고 합니다. 저는 개인적으로 4차 산업 혁명 시대에는 극단적 효율성 향상의 시대이기 때문에 그 어느 때보다 효율성이 중요시 되는 시대라고 생각합니다. Autohotkey 와 함께 Windows PC 사용의 극단적 효율성 향상을 맛 보시기 바랍니다.

그리고 마지막으로 제가 최근에 찾은 블로그 중 아래 포스팅에서도 소개를 했던~

https://iamaman.tistory.com/2021

아래 블로그에도 한번 방문해 보시기 바랍니다. Autohotkey 구루라고 하시는데~ 정말 좋은 코드들을 많이 볼 수가 있고~

http://the-automator.com/

요즘에는 유튜브에서 방송도 하시더군요. Autohotkey 에 관심 있으신 분들은 Joe Glines 님의 유튜브 채널도 한번 구독해 보시기 바랍니다. 세계의 다양한 Autohotkey 유저분들과 인터뷰 도 하는데 배울 점이 많이 있는 것 같습니다.

https://www.youtube.com/channel/UCR0Hs-Bgz1SgGCq_0kbzjjg

저도 Autohotkey 는 어느 정도 사용한다고 생각을 했었는데~ 정말 세상에는 많은 실력자들이 있는 거 같네요. 지금보다 더 열심히 공부해 봐야 되겠습니다.

그럼 즐거운 Autohotkey 코딩하시고~ 굿 밤 되시기 바랍니다 ^^



Autohotkey 를 사용하여 처음에는 현재 활성화된 창에 대해서만 자동화를 주로 하지만 Autohotkey 에 어느 정도 익숙해지고 나면 비활성화 된 프로그램에 대해서 자동화를 하고 싶다는 생각이 들곤 합니다.

이런 목적으로 사용하는 Autohotkey 명령어는 ControlSend, ControlGet, ControlMove, PostMessage, SendMessage, ControlGetText 등이 있고 저는 주로 ControlSend 를 사용하여 비활성 창에 명령어를 던져 보고 ControlSend 로 되지 않는 경우 PostMessage/SendMessage 를 사용하곤 합니다.

PostMessage/SendMessage 명령어를 사용하기 위해서는 Windows 메시지를 알아야 되고 PostMessage/SendMessage 에 대한 사용법은 Autohotkey 메뉴얼을 보면 아래와 같이 튜토리얼도 확인할 수 있습니다.

https://autohotkey.com/docs/misc/SendMessage.htm

아래 페이지를 보니 한글로 된 자료도 있더군요. 사람이 번역을 한 건지 구글 번역과 같은 번역 프로그램을 사용한 건지는 잘 모르겠습니다. 영어가 부담스러운 분들은 한 번쯤 읽어보시기 바랍니다.

http://autohotkeykr.sourceforge.net/docs/misc/SendMessage.htm

어쨌든 위 튜토리얼에서는 Windows Spy 프로그램으로 Winspector Spy 를 알려주고 아래 주소에서 다운로드 받아서 사용할 수가 있습니다.

https://www.softpedia.com/get/Security/Security-Related/Winspector.shtml

뭐 정확하게 기억은 안 나지만 예전 경험으로는 Winspector Spy 를 사용하다가 뭔가 잘 안되서 사용을 안 하게 됐었는데~ 저는 요즘은 Winspector Spy 대신에 Window Detective 를 사용하고 있습니다. Window Detective 는 아래 주소에서 다운로드 받을 수 있고~ 설치 방법은 다운로드 받은 후에 실행 파일을 실행 하고 다음~ 다음만 누르면 되므로 굳이 설명 드리지 않겠습니다.

http://windowdetective.sourceforge.net/

오픈소스 프로그램을 검색하는 AlternativeTo 에서 Windows spy 프로그램들을 검색 해보니

Window Detective 가 조금 더 인기가 좋은 거 같아서~ 요즘은 Window Detective 를 주로 사용하게 되었습니다. AlternativeTo 는 유용한 프로그램들을 찾을 수 있는 굉장히 좋은 사이트로 AlternativeTo 에 대해 알고 싶은 분들은 아래 포스팅을 참조하시기 바랍니다.

https://iamaman.tistory.com/2123

Window Detective 를 설치한 후에 실행하면 아래와 같이 프로그램이 실행되는 것을 확인할 수 있고~ 특정 프로그램의 메시지를 확인하기 위해서는 “Pick window” 버튼을 드래그해서 메시지를 확인하고 싶은 창에 드랍하면 됩니다.

아래 그림은 PotPlayer 에 대해 Window Detective 를 사용하여 메시지를 확인하는 장면이고~ Window Detective 에서 오른쪽 클릭 한 후에 message 메뉴를 선택하면 PotPlayer 에 대한 메시지를 확인할 수 있게 됩니다.

아시다시피 윈도우 프로그램에는 정말 많은 메시지들이 있기 때문에 내가 원하는 메시지를 확인하는 것이 중요합니다. 위 그림에서 깔데기 모양을 선택하면 원하는 메시지들만 선택적으로 확인할 수 있습니다.

그럼 즐거운 Autohotkey 코딩 Life 되시기 바랍니다. ^^



무슨 바람이 불어서 그런 건지는 모르겠지만 최근에 영어 공부를 다시 시작 했습니다. 과거에는 영어 공부하기 정말 싫었는데 요즘은 영어 공부하기 정말 편해진 세상이 된 것 같습니다. 요즘 저는 영어 공부를 위해서 수업도 듣고 영어로 쓰여진 책도 읽고 여러가지 다양한 영어 유튜브 방송도 보고 있고 영어로 된 드라마도 보면서 영어 공부를 하고 있습니다. 예전에 미드를 많이 보다가 한동안은 미드를 많이 보지 않았었는데 최근에 다시 영어 공부를 위해서 미드를 보고 있습니다. 생활영어를 배우고 싶어서 판타지나 어려운 전문분야의 드라마가 아니라 생활 드라마를 찾아봤고, 그중에서 최근 매우 인기가 높다는 캐나다 드라마인 킴스 컨비니언스를 보고 있습니다.

미드를 보면서 영어 공부를 하기 위한 준비 사항은 다음과 같습니다.

1. 영어 드라마

당연한 얘기지만 영어 드라마를 준비 해야 되겠고 보통의 경우 생활 영어를 학습하는 것이 목표이므로 생활 드라마를 선택하는 것이 좋을 것 같습니다. 드라마와 함께 영어로 된 자막을 받아 놓으면 됩니다.

2. 카카오 팟플레이어

어떤 동영상 플레이어를 사용해도 상관이 없지만 저는 카카오 팟플레이어를 사용하면서 드라마를 통한 영어 공부가 쉬워졌습니다. 드라마를 보다가 모르는 단어가 있으면 스페이스바를 눌러서 드라마를 잠깐 멈춰 놓고 모르는 단어를 클릭하면~

다음 사전을 통해서 단어를 찾아줍니다. 요즘 다음을 비롯해 인터넷 사전들은 단어장 기능이 있어서 찾은 단어들을 클릭 한번으로 저장해 놓을 수가 있습니다. 이렇게 드라마를 보다가 모르는 단어들은 바로 바로 찾고 바로 바로 저장해 놓을 수 있는 굉장히 좋은 동영상 플레이어라는 생각이 들었습니다.

카카오 팟플레이어에서 F5를 누르고 카카오 팟플레이어 설정에 들어가 보면 다양한 옵션들이 있는데 기본적으로 단어를 찾을 때 인터넷 익스플로러를 사용하도록 설정되어 있습니다. 저는 주로 크롬 브라우저를 사용하기 때문에 크롬 브라우저를 기본 브라우저로 설정을 해 놓고 사용하는 상태이며, 그래서 시스템 브라우저는 크롬 브라우저로 되어 있습니다. 그래서 제가 사용하는 크롬 브라우저에서 단어장을 열게 하기 위해서 아래와 같이 설정을 변경해 놓고 사용하고 있습니다.

카카오 팟플레이어에서 네이버 사전 검색

그리고 많은 분들이 다음 사전 뿐만 아니라 네이버 사전을 사용하실텐데~ 카카오 팟플레이어에서는 사전을 등록 할 수 있습니다. 클릭한 자막의 단어는 %%SS 에 들어가기 때문에 네이버 사전을 사용하고자 한다면 아래와 같이 설정하면 될 거라고 생각을 했습니다.

http://dic.naver.com/search.nhn?query=%%SS

그런데 역시나… 경쟁사라 그런지 카카오 팟플레이어에서 네이버 사전으로는 검색이 안되더군요. 검색을 조금 해 보니 어떤 분들은 redirect 서버를 만들어서 사용하시는 분들도 있던데~~ 저는 Autohotkey 를 사용하여 카카오 팟플레이어 에서 네이버 사전을 사용하도록 설정했습니다.

일단 Autohotkey 코드를 하나 작성합니다. Autohotkey 의 argument 를 사용하는 방법으로 해당 내용에 대해서는 아래 주소의 포스팅을 참조하시기 바랍니다.

https://iamaman.tistory.com/1635

카카오 팟플레이어에서 네이버 사전으로 단어 검색을 위한 Autohotkey 코드는 아래와 같습니다. naverSearch.ahk 라는 이름으로 만들었고 내용은 아래와 같습니다.

Loop, %0%

{

param := %A_Index%

Run http://dic.naver.com/search.nhn?query=%param%

}

다음으로 카카오 팟플레이어에서 아래와 같이 설정을 합니다.

제목은 “네이버 사전” 으로 했는데 아무렇게나 편한대로 적어주면 됩니다.

항목에 위에서 만든 naverSearch.ahk 코드의 fullpath 를 적어주고 argument 로 "%%SS" 를 적어줍니다. 결과적으로 아래와 같은 형태로 적어 주면 됩니다.

C:\AHK\naverSearch.ahk "%%SS"

이것으로 카카오 팟플레이어에서 네이버 사전으로 단어 검색하기 위한 설정은 끝났네요. 클릭을 했을 때 네이버 사전으로 검색이 되게 하기 위해서 “네이버 사전” 항목을 제일 위로 뒀습니다.

이제 미드를 보다가 모르는 단어를 클릭해보면 아래와 같이 네이버 사전으로 검색이 되는 것을 확인 할 수 있습니다.

카카오 팟플레이에어서는 구글 번역 기능도 제공을 해 줘서 요즘은 영어 자막만 있으면 실시간으로 한글로 번역이 되더군요. 가끔 안될때도 있긴 하던데 영어 공부 목적으로 보는데 그리 큰 불편은 없는것 같네요~

카카오 팟플레이어에서 파파고 검색

요즘은 많은 분들이 파파고 검색도 많이 이용을 하실 텐데 ~ 파파고 검색 역시 마찬가지로 아래와 같이 Autohotkey 스크립트(papagoSearch.ahk)를 만들어 준 후에~

Loop, %0%

{

param := %A_Index%

Run, https://papago.naver.com/?sk=auto&tk=ko&st=%param%

}

팟플레이어에서 파파고 검색을 할 수 있도록 아래와 같이 설정을 해 주면 됩니다.

검색을 할 때는 모르는 단어에 오른쪽 클릭을 해 보면 자막 단어 검색 설정했던 내용들이 나오고 위에서 설정했던 파파고 검색을 클릭하면 검색이 이루어 집니다.

이렇게 파파고 검색이 되는 것을 확인할 수 있습니다.

그럼 다들 미드 보면서 즐겁게 영어 공부 해 보시기 바랍니다.



  1. jenn 2019.07.14 21:11

    안드로이드탭 이용중인데, window환경에서만 다운받을수 있는게 아쉬워요 ㅜ ㅜ
    안드 마켓에서 미플레이어라는 프로그램이 있긴한데, 카카오플레이어보다 못하네요 ㅠㅠ

    혹시 안드탭중에 비슷한앱(내가 설정한 사전으로 바로 검색) 추천받을수 있을까요?

    • 남성 2019.07.14 23:04 신고

      저도 안드로이드 미디어 플레이어 중에 자막이 바로 검색되는 프로그램은 모르겠네요~ 암튼 방문해 주셔서 감사합니다.

  2. Questioner 2019.08.29 19:39

    안녕하세요. ahk 파일에는

    Loop, %0%
    {
    param :=%A_Index%
    Run http://dict.naver.com/search.nhn?query=%param%
    }

    이것말고 다른 내용이 없나요?

    위 과정 완료해도 저는 왜 홈페이지가 안뜨고 ahk파일이 scite4hotkey로 실행이 되는걸까요? ㅜㅜ

    compile 할 필욘 없는거지요?? 문제가뭘까요...

  3. Questioner 2019.08.29 19:55

    아 찾았습니다^^

    ahk를 scite4hotkey로 연결프로그램해놨기에...

    compile해서 .exe로 실행시키니 되는군요. 좋은 정보 감사합니다^^

    그런데 댓글달때마다 그림문자쓰는게 조금 번거롭긴하네요 ㅎㅎ

    • 남성 2019.08.29 23:05 신고

      아 댓글을 달 때 그림 문자를 쓰게 되어 있는지 처음 알았습니다. 그림 문자를 안 쓰게 하는 설정이 있는지 확인해 봐야겠네요
      ~ 방문해 주셔서 감사합니다. ^^

    • 남성 2019.08.29 23:34 신고

      로그인을 안 한 상태로 댓글을 다는 경우 그림문자는 항상 쓰도록 되어 있네요.

  4. Questioner 2019.08.29 20:31

    덧붙여서 써주신 주소는 사전홈의 주소라서 독일어 국어 베트남어 등등 다 나오는데 영어사전으로 들어가고 싶은 분은 아래 주소 쓰시면 되겠네요

    Loop, %0%
    {
    param :=%A_Index%
    Run https://en.dict.naver.com/#/search?range=all&query=%param%
    }

    • 남성 2019.08.29 23:14 신고

      네 맞습니다. ^^ 참고로 위 포스팅에서의 argument 설정 부분은 Autohotkey 예전 문법 방식인데 최신의 Autohotkey 를 사용하신다면 다음과 같이 조금더 간단하게도 할 수 있습니다.

      param := A_Args[1]
      Run https://en.dict.naver.com/#/search?range=all&query=%param%

      최근의 Autohotkey argument 관련해서는 아래 포스팅을 참조하시기 바랍니다.

      https://iamaman.tistory.com/3002

Autohotkey 를 사용한지는 꽤 오래 된것 같고 저는 보통 Autohotkey 를 설치할때 recommend 버전인 unicode 32 비트를 설치하곤 합니다. 그런데 최근에 Autohotkey dllcall 을 사용하여 msvcrt.dll 의 _i64toa 함수를 사용하다 보니 제가 설치한 unicode 32-bits Autohotkey 에서는 정상적으로 동작을 하지 않더군요. _i64toa 함수는 radix 를 변환하는 함수이고 보통 2 진수, 8 진수, 16 진수 등으로 변환하는데 사용하곤 합니다.

_i64toa 함수의 사용 예는 아래와 같습니다. 아래 예는 숫자 15를 16진수(Hexa) 값으로 변환하는 예인데~



decNumber := 15

radix := 16

VarSetCapacity(kk,65,0)

DllCall("msvcrt\_i64toa", "Int64", decNumber, "Str", kk, "Int", radix)

msgbox %kk%

실행을 해보면 아래와 같이 정상적으로 f 라는 값이 나오게 됩니다.

그런데 decNumber := 16 으로 하게 되면 아래와 같이 뭔지 알 수 없는 값이 나오게 되더군요.

여러가지 방법들을 시도하다 알게 된게~ Autohotkey 가 설치된 폴더(C:\Program Files\AutoHotkey)에 같이 들어있는 AutoHotkeyA32.exe 즉 ANSI 32-bit 를 사용하면 정상적으로 동작을 하더군요. decNumber := 16 인 경우에 대해 AutoHotkeyA32.exe 를 사용하여 실행해보면 아래와 같이 정상적인 Hexa 값을 얻을 수 있습니다.

Autohotkey 를 설치 할때 보면 아래와 같이 ANSI 32-bit 의 경우 legacy scripts 와의 호환성이 좋다고 나오고 따라서 기존 DLL 과 같이 좀 오래된 라이브러리를 사용하는 경우에는 ANSI 32-bit Autohotkey 를 사용하는게 적절할 듯 보입니다.

그런데 우리는 한글을 주로 사용하고 한글 정규 표현식 등을 사용한다면 unicode 버전을 사용하는게 좋으므로 제가 내린 결론은 unicode 32 비트 버전을 default 로 설치하고~ legacy scripts 를 사용할때만 선택적으로 ANSI 32-bit Autohotkey 를 사용하는게 적절할것 같습니다.



Autohotkey 잘~ 사용하고 계신가요? 저는 가끔씩 오토핫키 포럼에 들어가 보는데~ 오토핫키 포럼에 들어가면 정말 훌륭한 Autohotkey 코드들이 많이 있습니다. 최근에는 조금 뜸하게 들어가 보다가 이번에 Autohotkey 포럼에서 찾은 괜찮은 코드를 하나 소개해 드리려고 합니다.

오토핫키 포럼의 주소는 아래와 같습니다.

https://www.autohotkey.com/boards/

오토핫키 포럼에서 괜찮은 프로젝트들을 찾기 위해서는 아래 주소의 “Scripts and Functions” 페이지에 들어가 보면 됩니다.

https://www.autohotkey.com/boards/viewforum.php?f=6&sid=a590fb371498805bf28158722033ff21

그 중에 최근 발견한 괜찮은 Autohotkey 코드는 Vis2 라는 Image to Text OCR 라이브러리 입니다. 포럼에서 Vis2 에 대한 소개 페이지는 아래와 같은데 ~

https://www.autohotkey.com/boards/viewtopic.php?f=6&t=36047

위 주소에서 설명하듯이 단축키를 사용하여 화면의 이미지로부터 텍스트를 추출할수 있는 어플리케이션 입니다. 순수 Autohotkey 로 만들어진 것은 아니고 OCR(Optical Character Recognition) 을 하는데 아래 포스팅에서 소개해던 tesseract 를 사용하게 됩니다.

http://iamaman.tistory.com/2615

Vis2를 사용하기 위해서는 아래 github 페이지에서 코드를 클론 또는 다운로드 한 후에~ demo.ahk 파일을 실행시켜 보면~ 데모 프로그램이 실행되고~

https://github.com/iseahound/Vis2

git clone https://github.com/iseahound/Vis2.git

아래와 같이 샘플코드가 실행되는 것을 확인 할 수 있습니다.

메시지 박스로 나오는 부분은 같이 들어있는 test.jpg 이미지에 대한 OCR 결과가 나오는 것을 확인 할 수 있고 프로그램 실행시 소개되는 내용과 같이 Win + C 단축키를 통해 텍스트 인식을 실행 할 수 있습니다.

아래 주소에서 tesseract 언어 파일들을 다운로드 해서 영어 이외의 다른 언어들에 대해서도 인식이 가능하다고 합니다.

https://github.com/tesseract-ocr/tessdata_best

https://github.com/tesseract-ocr/tessdata_fast

코드에서 확인 할 수 있는 바와 같이 Win + C 를 누르면 OCR 이 실행되고 기본 언어는 영어 입니다. ① 에서와 같이 인식하고 싶은 부분을 Drag 해서 블록 설정하면 ② 부분과 같이 인식된 텍스트가 나오게 됩니다.

그리고 인식된 텍스트는 클립보드에 저장 됩니다. 따라서 Ctrl + V 를 통해 인식된 텍스트를 붙여넣기 할 수 있습니다.

아래 포스팅에서 소개했던 Capture2Text 와 유사한 툴이라 비교하면서 사용해 보시는 것도 좋을 것 같습니다.

http://iamaman.tistory.com/2616



  1. 강삼성 2019.01.02 16:59

    관리자의 승인을 기다리고 있는 댓글입니다

  2. 2019.01.28 15:07

    비밀댓글입니다

    • 남성 2019.01.28 15:48 신고

      ansi 32, unicode 32 둘 다 정상적으로 동작하는데요.... 탐색기에서 demo.ahk 파일을 더블 클릭해서 실행하신 건가요?

    • 오토핫키 2019.01.28 23:05

      Sci에서 f5로 실행 후 확인했습니다.

    • 남성 2019.01.28 23:35 신고

      Autohotkey_L 버전 맞는거죠? 저도 SCI 에서 실행해 봤는데 정상적으로 동작하는데요. 혹시 basic 버전이나 H 버전 같은건 아닌가 해서요.

    • 오토핫키 2019.01.28 23:59

      L버전은 맞습니다.
      단 뮤텍스 수정한 1.1.20.03버전입니다.
      너무 오래된 버전이라 안 될 수도 있을듯 하네요 최신버전으로 설치해서 다시 해봐야겠습니다.

  3. 오토핫키 2019.01.30 11:32

    최신버전으로 설치 후 실행하니 정상작동하네요 감사합니다.

아래 포스팅에 이어서 오늘은 Autohotkey 로 이베스트증권 xingAPI 를 사용하여 주식 현재가를 가져 오는 방법에 대해서 소개하려 합니다. 아래 포스팅에 이은 소개이므로 해당 내용을 어느 정도 숙지하고 오셔야 이해가 될 것입니다.

http://iamaman.tistory.com/2224

아래 xingAPI 메뉴얼에 나와 있는 바와 같이 로그인이나 계좌 정보와 관련된 내용들은 XASession 을 사용하지만 조회를 하기 위해서는 XAQuery 를 사용해야 합니다. 또한 실시간 정보를 얻기 위해서는 XAReal 을 사용합니다.

http://www.ebestsec.co.kr/apiguide/guide.jsp?cno=100

또한 xingAPI 에는 TR 이라는 개념이 있는데~ xingAPI 를 사용할 때의 입출력 데이터 규격이라고 보시면 될 것 같습니다. TR 에 정의되어 있는 대로 입력을 넣어주면 증권사 서버에서 출력을 받을 수 있다는 것입니다. TR 은 파일로 되어 있는데 xingAPI 를 설치하면 DevCenter 라는 프로그램이 설치 되고 DevCenter 에서 아래와 같이 버튼을 누르면 한번에 다운로드 받을 수 있고 C:\eBEST\xingAPI\Res 폴더에 res 라는 확장자로 설치 됩니다. 각 TR 에 대한 입출력 정보는 DevCenter 에서 확인하실 수 있습니다.

주식 현재가 조회를 하기 위해서는 t1101 또는 t1102 TR 을 사용할 수 있습니다. 본 포스팅에서는 어떤 질문자 분이 계셔서 t1101 TR 을 사용해 보겠습니다. 해당 TR 의 res 파일 위치는 C:\eBEST\xingAPI\Res\t1101.res 이고~ 주식 현재가를 가져오기 위한 Autohotkey 코드는 아래와 같습니다.

아래 코드를 실행하기 전에 당연히 이전 포스팅에서 사용을 했던 로그인은 먼저 해야 되겠죠~

;~ ------------------------ 주식 현재가 가져오기 Start ----------------------------------------

instXAQueryT1102 := ComObjCreate("XA_DataSet.XAQuery")

ComObjConnect(instXAQueryT1102, "query_") ; event binding to query_ReceiveData

login_query := 0

instXAQueryT1102.ResFileName := "C:\\eBEST\\xingAPI\\Res\\t1101.res"

instXAQueryT1102.SetFieldData("t1101InBlock", "shcode", 0, "078020") ; 이베스트 투자 증권 코드

instXAQueryT1102.Request(0)

while login_query = 0 ; hold for ReceiveData event

{

}

name := instXAQueryT1102.GetFieldData("t1101OutBlock", "hname", 0)

price := instXAQueryT1102.GetFieldData("t1101OutBlock", "price", 0)

MsgBox %name% 종목의 현재 가격은 %price% 입니다.

;~ --------------------- 주식 현재가 가져오기 End ----------------------------------------

query_ReceiveData(code, msg)

{

global login_query:= 1

}

위 코드에서 입력으로 준 078020 은 이베스트 투자 증권의 코드 번호입니다. 정상적으로 동작을 하면 아래와 같이 이베스트투자증권의 현재 가격이 9770 원이라고 나오는 것을 확인할 수 있습니다.

위 코드의 동작중 중요한 부분에 대한 설명은 다음과 같습니다.

0. XAQuery 에 대해 ComObjCreate 를 하고 응답 함수를 ComObjConnect() 를 통해 binding 합니다.

1. SetFieldData 를 통해 t1101 TR 에 대한 입력값을 설정하고~

2. 서버에 Request 를 하고

3. whle 문을 통해 서버 응답을 기다립니다.

4. ReceiveData 함수를 통해 응답이 왔음을 확인하면 while 문을 빠져나가게 되고~

5. GetFieldData 를 통해 서버로부터 온 값 중 필요한 부분을 읽습니다.

혹시나 로그인을 안 한 상태로 위코드를 실행하고 안 돌아간다고 댓글 다실 분들을 위해 전체 코드를 첨부합니다. 아래 코드에서 증권사의 아이디,  패스워드,  공인인증서 비번은 본인의 것을 넣어야 된다는 설명은 굳이 안 해도 되겠죠?

위 코드의 동작만 확실히 이해하게 된다면 다른 대부분의 조회 TR도 이해할 수 있을 거라고 생각합니다.

Autohotkey 를 사용하여 이런것도 할 수 있다는 소개를 위해 작성해 봤는데~ 정말 Autohotkey 의 기능은 쓰면 쓸수록 무궁무진한 것 같습니다. 즐거운 Autohotkey 코딩 하시기 바랍니다.



  1. 이베스트 2018.10.09 14:31

    역시 남성 방장님의 친절한 답변에 감사합니다.열심히 연구 노력해보겠습니다.^^

  2. 키움 2019.04.07 21:31

    여기 글을 보고 키움증권 api를 통해 만들어 보려고 하는데 막히는 부분이 있어서 여쭙니다

    k1:=ComObjCreate("KHOPENAPI.KHOpenAPICtrl.1")
    k1.CommConnect() -> 여기서 오류가 납니다


    파이썬 코드를 보면
    self.kiwoom = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1")
    self.kiwoom.dynamicCall("CommConnect()")


    혹시 해결방안에 대해 아시면 답해주시면 감사하겠습니다. ㅠㅠ

    • 남성 2019.04.07 22:33 신고

      글쎄요 제가 키움증권 API 를 사용하고 있지는 않아서.... Connect 부분에서 에러나는 거면 키움증권 API 관련 사이트에 질문 하면 쉽게 해결 될 수 있지 않을까 합니다.

  3. 2019.07.29 12:57

    비밀댓글입니다

    • 남성 2019.07.29 14:08 신고

      github 에 올려 놓은거라 복사됩니다. 위 코드의 아래 부분에 있는 view raw 라고 써 있는 부분을 클릭하면 새창에서 코드가 열리니 복사 하셔도 되고 그냥 파일로 받고 싶으면 그 옆에 파일명을 클릭하면 github 사이트로 넘어가서 다운로드 받을 수 있습니다. 방문해 주셔서 감사합니다. ^^

Autohotkey 를 사용하여 윈도우를 자동화하는 경우 다양한 사례들에 부딪히게 되는데~ 오늘은 제가 최근에 겪은 사례와 그 해결 방법에 대해서 소개를 해 보렵니다.

저는 PC에서 카카오톡 PC 버전을 사용하고 있습니다. 로그인 설정에 따라서 다르겠지만 저는 카카오톡 PC 버전에 “잠금 모드로 로그인 설정”을 해 놔서~ 실행되면 아래의 그림들과 같이 잠금 모드로 실행되고 로그인 비밀번호를 입력해 줘야 PC 에서 카카오톡을 사용할 수 있습니다.

그러다 보니 매번 비밀번호를 입력하는 것이 귀찮아서 Autohotkey 를 사용하여 카카오톡 로그인 자동화를 만들어 보고 싶었습니다. 그런데 만들다 보니 카카오톡 비밀번호를 넣기 위해서는 비밀번호를 넣는 Edit3 control 이 활성화 될 때까지 기다려야 했습니다. 물론 조금 단순하게 그냥 sleep 을 오래줘서 기다리게 하는 방법도 있겠지만 Edit3 control 의 유무를 체크하게 하는 방법을 사용하고 싶었습니다.

그래서 Autohotkey 로 특정창의 특정 control 유무를 체크하는 방법을 알아보니 ControlGet 이라는 명령어가 있었습니다. ControlGet 의 메뉴얼은 아래 주소에서 확인할 수 있습니다.

https://autohotkey.com/docs/commands/ControlGet.htm

아래는 카카오톡 창에서 패스워드를 입력하는 Edit3 컨트롤이 사용 가능한지를 확인하는 코드 입니다.

ControlGet, OutputVar, Enabled, , Edit3, 카카오톡 ahk_exe KakaoTalk.exe

Msgbox % OutputVar

매뉴얼을 보시면 아시겠지만 위 코드에서 Enabled 부분이 SubCommand 인데 처음에는 Edit3 가 보이는지 안 보이는지를 체크 하려고 Visible SubCommand 를 사용 했습니다.

그런데 아래와 같이 사용자 눈에는 보이지만 초기에는 Visible 이 0 이고~

Edit3에 커서가 Focus 되서 뭔가 하나라도 입력이 되어 있는 경우에만 Visible 이 1 로 표시된다는 걸 알 수 있었습니다.

따라서 Edit3 컨트롤이 사용가능한지 아닌지를 판단하기 위해서는 Enabled SubCommand 를 사용하는게 맞는 것으로 보였습니다.

결론적으로 Edit3 컨트롤이 입력 가능 할 때까지 기다렸다가 암호를 입력하고 Enter 를 쳐서 로그인하는 코드는 아래와 같습니다. passWordStr 변수의 값을 자신의 PASSWORD 로 변경 후 사용해 보시기 바랍니다.

passWordStr:="PASSWORD"

Loop

{

ControlGet, OutputVar, Enabled, , Edit3, 카카오톡 ahk_exe KakaoTalk.exe

if OutputVar = 1

break

Sleep, 333

}

Sleep, 333

ControlSend, Edit3, %passWordStr%{Enter}, 카카오톡 ahk_exe KakaoTalk.exe


Autohotkey 를 다양한 용도로 사용하다 보면 조금더 복잡한 형태로 사용하고 싶은 경우가 종종 있습니다. 가령 이전에 계속 사용하던 스크립트에서 설정한 핫키를 현재 실행하는 스크립트에서 실행하고 싶은 경우 등이 그렇습니다.

다음과 같이 test1.ahk 스크립트에서 btw 라는 단축키를 사용하고 있는데

::btw::by the way

현재 실행하는 test2.ahk 스크립트에서는 by the way 에 쉼표(, ) 를 추가하고 싶다고 해 보죠.

이런 경우에는 그냥 test2.ahk 스크립트에 ::bt, ::by the way, 와 같이 단축키를 추가로 설정해도 되겠지만~

이전 스크립트를 사용하는 방법도 있습니다. 마치 객체지향 프로그래밍에서 상속을 사용하는 것과도 유사하다 볼 수 있을 것 같네요. 아래와 같이 ^b 로 단축키를 설정하고 SendLevel 을 1로 설정했습니다.

^b::

SendLevel 1

Send btw,

return

이제 둘다 실행된 상태에서 Ctrl + B 를 눌러보면 아래와 같이 by the way, 가 삽입이 되는 것을 확인 할 수 있습니다.

SendLevel 명령의 특징에 대해 조금더 자세히 알고 싶으신 분들은 아래 주소의 메뉴얼을 참조해 보시기 바랍니다.

https://autohotkey.com/docs/commands/SendLevel.htm



아래 포스팅에서 Windows 10 에서 putty 대신에 OpenSSH 클라이언트를 사용하여 ssh 접속을 할 수 있다고 설명 드렸습니다.

http://iamaman.tistory.com/2568

위 주소의 포스팅에서 ssh 사용 명령어를 보면 아래와 같은데~

ssh ID@server_IP -p port_Number

ex) ssh abc@localhost -p 1234

Autohotkey 를 사용하여 위 명령어를 사용하려면 아래와 같이 하면 됩니다.

Run, ssh abc@localhost -p 1234,,,

그런데… 아무리 해도 정상적으로 위 Autohotkey 코드가 동작하지 않더군요. 계속해서 검색을 해보니 결국에는 user credentials 때문이더군요. RunAs 를 사용하여 Windows 유저의 로긴 정보를 넣어줘야 정상적으로 동작합니다.

결과적으로 Autohotkey 를 사용하여 OpenSSH 클라이언트 를 사용하기 위해서는 아래와 같이 코딩 하면 됩니다.

RunAs, 윈도우아이디, 윈도우비밀번호

Run, ssh 아이디@서버주소 -p 포트넘버

RunAs

위 코드에서 한글로 입력한 <윈도우아이디, 윈도우비밀번호 , 아이디, 서버주소, 포트넘버> 는 자신의 계정에 맞는 정보를 입력 하면 됩니다.

위 코드를 실행 시키면 ssh 창이 뜨고 password 를 입력하면 아래와 같이 ssh 를 접속 할 수 있습니다.



요즘 청년 실업이 심각하다고 합니다. 저도 회사를 다니다가 요즘에는 백수가 된 상태라서, 관심 기업이 나오면 종종 지원을 해 보고 있습니다. 회사마다 입사지원 양식도 다 다르고 자소서에 원하는 내용도 달라서 입사 지원을 할 때마다 조금 귀찮고 짜증이 나더군요.

요즘에는 대부분 홈페이지에서 입사 지원을 하게 되는데 모든 회사가 그런 것은 아니지만 일부 회사의 경우 붙여넣기가 되지 않더군요. 보통 500~1000 자 정도 자기소개서를 쓰는 거 같은데~ 홈페이지에 바로 쓰기 보다는 워드나 구글 문서 등에 작성을 하고 붙여넣기 하시는 분들이 대부분일 거라고 생각합니다. 그런데 붙여넣기가 안 되는 사이트에서는 자기소개서를 다시 일일이 써야 되기 때문에 여간 짜증나는게 아닙니다.

그래서 이럴 때 사용하기 위해 Autohotkey 로 단축키를 하나 만들어 봤습니다. 코드는 아래와 같습니다. 엄청 간단하죠~ 그런데 이 단순한 단축키 프로그램이 사용해 보면 엄청난 time saving 을 해 준답니다.

ClipboardSend.ahk


#F10::    ; Win + F10

SendRaw %clipboard%

return

Autohotkey 를 사용하지 않는 분들을 위해서 exe 프로그램도 올립니다.

ClipboardSend.exe

Autohotkey 를 조금만 아시는 분들도 위 코드를 보면 바로 이해하실 수 있을 겁니다. 위 Autohotkey 코드는 Win + F10 을 누르면 Clipboard 의 내용이 포커스 되어 있는 부분에 써지게 됩니다. 따라서 워드프로세서 프로그램에 자기소개서를 열심히 작성한 후에 완성된 텍스트를 복사하고 ~ 홈페이지의 입력할 부분을 클릭하고~ Win + F10 을 눌러주면 붙여 넣기를 하는 것처럼 자기소개서 내용이 입력됩니다.

보통 붙여넣기가 안되는 사이트의 경우 Ctrl 이 막혀 있는 경우가 많기 때문에 Win 키를 사용했습니다.

위 단축키를 사용하니 붙여넣기가 안 되는 회사 홈페이지의 입사지원 양식에 자기소개서 내용을 작성하는 것이 너무나 편해졌네요. 누군가 한테는 도움이 되었길~



  1. 오종혁 2019.01.31 22:44

    안녕하세요! 님이 올려주신 autohotkey를 이용해서 지원서에 자기소개를 잘 복붙할 수 있었습니다! 감사합니다!

    6문항에 한 문항당 1000자 마지막 문항은 1400자라서 ctrl + v 가 안된다는 사실을 알았을 때 눈앞이 캄캄했는데

    혹시나 하는 마음에 구글에 검새했다가 이 글과 프로그램을 발견해서 잘 썼습니다! autohotkey가 뭔지도 모르는데 설명도 잘 해주셔서

    큰 어려움 없이 잘 쓸 수 있었습니다.

    시간을 세이브하게 해주셔서 감사합니다!

    • 남성 2019.02.01 09:07 신고

      도움되었다니 다행이네요. ^^ 꼭 합격 하시기 바랍니다.

  2. 2019.06.02 20:49

    비밀댓글입니다

    • 남성 2019.06.02 22:20 신고

      도움 되셨다니 다행입니다. 꼭!! 취업 성공하시기 바랍니다. ^^

Autohotkey 를 사용하여 툴을 만들어서 사용할 때 일단은 검색을 먼저 해 보는 편입니다. 보통의 경우 제가 필요한 툴들은 누군가가 다 만들어서 사용을 하고 있었고 오늘 소개해 드릴 간단한 타이머도 Autohotkey 포럼에서 찾은 코드입니다.

컴퓨터에서 타이머가 필요해서 Autohotkey 로 어떻게 만들어 볼까 고민하다가 처음 생각은 GUI 를 사용하여 만들어야겠 다고 생각을 했었는데 포럼에서 flyingDman 의 코드를 보니 굉장히 간단하게 Progress 바를 사용하여 타이머를 만들었더군요. 굳이 GUI 를 만드는것 보다 훨씬 더 편한 방법 같아서 소개를 합니다 코드는 아래와 같습니다.




실행 시키면 다음과 같은 Progress 로 구성된 UI가 나오고 설정 하고자 하는 타이머의 분과 초 숫자 4자리를 순서대로 입력해 주면 타이머가 실행됩니다. 타이머가 종료되면 소리가 난 후에 종료 이후 지난 시간이 다시 또 Count UP 됩니다. 처음 실행시킨 후에 시간을 입력하지 않고 그냥 엔터를 치면 바로 Count UP 타이머로 동작하게 됩니다.

코드를 보면 아시겠지만 p 를 누르면 pause 가 toggle 되고 ESC 를 누르면 프로그램이 종료 됩니다. 그리고 s 를 누르면 타이머가 다시 시작합니다. 위 실행 화면에서 보시는 바와 같이 title 바가 없이 표시가 되는데 이는 Progress 코드에서 b 옵션을 줬기 때문입니다. UI 가 모니터 가운데 나와서 옮기고 싶다 하시는 분들은 b 옵션을 제거하고 실행시키시면 아래와 같이 타이틀바가 생기고 UI 를 드래그 해서 이동할 수 있습니다.

Autohotkey 를 사용하지 않는 분들도 사용해 보시라고 b 옵션을 제거하고 p, s 단축키도 Win + P, Win + S 로 변경하여 컴파일한 파일도 올립니다.

flyingDman_Timer.exe

저는 개인적으로는 지금까지 Autohotkey 를 사용하면서 SplashImage 를 종종 사용을 해 봤지만 Progress 를 사용해 본 적이 없었는데 이번 코드를 보면서 Progress 를 이런 식으로도 사용할 수 있구나라는 생각을 하게 되었습니다.

이 글을 보시는 Autohotkey 사용자 분들도 Autohotkey 를 공부하는데 참조하시기 바랍니다.



윈도우 컴퓨터를 사용하면서 다양한 폴더에 대하여 Autohotkey 를 사용하여 단축키로 굉장히 쉽게 접근 할 수가 있습니다. Autohotkey를 사용하여 폴더를 여는 경우 아래와 같이 RUN 명령어를 사용하고~ explore 옵션을 줘도 되고 안 줘도 됩니다. 아래 코드를 실행하면 해당되는 폴더들이 탐색기 창에서 열리는 것을 확인할 수가 있을 겁니다.


예)

Run, C:\Windows\SysWOW64

Run, explore C:\Windows\SysWOW64\migwiz


요즘은 스마트폰을 많이 사용하고 있고 스마트폰에서 사진을 찍어서 컴퓨터로 옮기는 경우가 굉장히 많습니다. 물론 컴퓨터와 USB로 연결하는 것이 귀찮아서 구글 드라이브와 같은 클라우드 드라이브를 통해서 사진을 옮기기도 하지만 많은 양을 옮기고 싶은 경우엔 USB로 컴퓨터와 스마트폰을 직접 연결을 해서 사용하곤 합니다.

저는 현재 안드로이드 스마트폰을 사용하고 있고 제 휴대폰 기준으로 카메라 사진들이 들어 있는 폴더는 아래와 같습니다. 아래 예에서 휴대폰 이름 부분은 각자의 휴대폰마다 다를 것입니다.

컴퓨터\휴대폰이름\Phone\DCIM\Camera

스마트폰을 연결할 때마다 위 폴더를 찾아 들어가는 것이 불편해서 Autohotkey 를 사용하여 해당 폴더를 단축키로 열 수 있게 하려고 시도를 해 봤습니다. 아래와 같은 Autohotkey 코드로 시도해 봤을 때 정상적으로 동작하지 않더군요.

Run, 컴퓨터\휴대폰이름\Phone\DCIM\Camera

실제로 Win + R 을 눌러서 실행 창에서 위 폴더를 실행시켜도 정상적으로 동작하지 않습니다. 윈도우 탐색기 주소창 부분에 위 주소를 붙여넣기 했을 때는 정상적으로 동작 하더군요.

그래서 초기에는 윈도우 탐색기를 실행시키고 주소창에 스마트폰 카메라 폴더 주소를 자동으로 적어 주는 형태로 Autohotkey 스크립트를 작성 했었습니다. 그런데 뭔가 이런 형식보다는 조금 더 다른 방법이 없을까 해서 검색을 해봤는데…. 역시나 있더군요. 아래 주소의 글을 통해서 힌트를 얻을 수 있었습니다.

https://autohotkey.com/boards/viewtopic.php?t=7163

저는 현재 한글 윈도우를 사용하고 있어서 위 주소의 코드를 약간 변경을 했습니다. 코드는 아래와 같습니다.

위 코드에서 GetDeviceFolder() 함수가 윈도우 컴퓨터에 연결된 스마트폰에 주소를 찾는 함수입니다. 저의 경우 아래와 같이 굉장히 복잡한…. 알 수 없는 주소가 return 되더군요.

위 코드를 실행시켜 보면 아래와 같이 스마트폰에 카메라 폴더가 탐색기창에서 열리는 것을 확인할 수가 있습니다.

스마트폰의 카메라 폴더 뿐만이 아니라 Screenshots, Download 폴더 등과 같은 다른 폴더들도 위와 같은 형태로 동일하게 접근 할 수 있을 겁니다.



Autohotkey 를 사용하여 특정 폴더에 있는 특정 확장자의 파일 수를 세기 위해 함수를 하나 만들어 봤습니다. Autohotkey 에서는 Loop 문을 통해 특정 확장자 파일 모두에 대해 접근을 할 수 있고 루프를 돌 때마다 A_Index 값이 증가 합니다. 이를 사용하면 파일의 갯수를 셀 수 있습니다. 다수의 특정 확장자 입력을 받을 수 있도록 했습니다.

코드는 다음과 같습니다.






위 코드중 제가 만든 함수는 fileCount() 이고 다음과 같이 폴더와 확장자를 지정하면 해당 폴더에 있는 특정 확장자의 갯수가 몇개인지를 알려 주는 함수 입니다. 확장자는 여러개를 순차적으로 넣으면 되고 아래 예에서는 jpg, png 파일을 찾도록 한 것입니다.

directV=C:\testFolder

N_Files := fileCount(directV, "jpg", "png")

그런데 검색을 조금 해 보니 특정폴더에 파일 개수를 찾기 위해서 Windows COM 을 사용하는 방법도 있더군요. Scripting.FileSystemObject, Shell.Application 등을 사용하는 방법이었으며 해당 방법들을 사용해도 동일한 결과를 얻을 수 있습니다. COM 을 사용하는 예에서 Shell.Application 을 사용하여 Item 의 갯수를 찾는 경우 숨김폴더는 제외한 갯수를 알려 주더군요.



요즘 같은 시대에 컴퓨터 활용 능력은 아무리 강조해도 부족하지 않을 것 같습니다. 최근에는 많은 아이들이 코딩 교육을 받고 있고 점점 소프트웨어 교육이 의무화 되고 있습니다. 4차 산업 혁명이라는 말은 이제 들어 본지 꽤 오래된 것 같고 아직까지는 생활 속에서 4차 산업 혁명으로 인한 변화가 그리 크지 않아 보이지만 어느 순간이 되면 급격하게 세상이 달라질 거라고 생각합니다. 개인적으로는 4차 산업혁명 시대에는 극단적인 생산성 향상이 일어나는 시대가 될 거라고 생각합니다. 이런 시대에 기계와 대화를 하는 기술인 소프트웨어를 모른다면 경쟁력이 떨어지는 것은 불 보듯 뻔하다고 생각합니다.

드루킹 사건이나 최근에는 한나라당 매크로 사용 뉴스 등으로 인하여 요즘 많은 분들이 매크로에 대해서 많이들 들어 보셨을텐데 매크로란 일련의 작업을 자동화하는 소프트웨어 이고 좋은 의도로 사용한다면 굉장히 크게 자신의 업무 효율을 높일 수가 있습니다. 윈도우에서 사용가능한 대표적인 매크로 프로그램으로는 Autohotkey 나 AutoIt 과 같은 프로그램들이 있습니다.

저는 Autohotkey 를 굉장히 많이 사용하는 편인데 Autohotkey 는 단순히 매크로로만 치부하기에는 너무나 다재 다능한 컴퓨터 언어라고 볼 수 있을 것 같습니다. Autohotkey 를 사용하기 위한 공부는 다른 컴퓨터 언어에 비해서 비교적 쉬운 편이지만 그래도 아무것도 모르는 상태에서 공부를 하는 경우 시간이 꽤 걸릴 거라고 생각합니다. 이런 경우에는 프로그래밍을 조금 더 쉽게 해주는 도구들을 사용하는 것도 좋을 것 같네요.

그중에서 Autohotkey 를 조금 더 쉽게 사용할 수 있게 해주는 도구로써 Pulover's Macro Creator 를 추천드립니다. Autohotkey 를 처음 사용하는 경우 아래 주소의 AutoHotkey Beginner Tutorial 을 따라해 보는 것을 추천드리고

https://autohotkey.com/docs/Tutorial.htm

Autohotkey 의 기본 사용법을 공부한 이후에 Pulover's Macro Creator 를 사용해 보라고 권해 드리고 싶습니다. Pulover's Macro Creator 는 다음과 같이 생겼습니다. 처음에 보면 조금 복잡해 보이지만 시간의 여유를 가지고 조금씩 습득해 보신다면 어떤 프로그램 보다도 생산성 향상에 큰 도움이 될 것입니다.

저는 아래 포스팅에서 이미지서치 와 관련된 내용에 대해서 소개를 했었는데 이미지의 중간 지점을 클릭 하기 위한 함수인 CenterImgSrchCoords() 함수를 Pulover's Macro Creator 를 사용하면서 알게 되었습니다.

http://iamaman.tistory.com/2111

Pulover's Macro Creator 의 홈페이지는 아래 주소와 같고 download 페이지에서 Pulover's Macro Creator 프로그램을 다운로드할 수 있습니다.

http://www.macrocreator.com/

http://www.macrocreator.com/download/

그리고 위의 홈페이지에서 Help & Tutorials 메뉴를 클릭 해서 보시면 Pulover's Macro Creator 의 사용 방법에 대한 개발자의 동영상 강좌를 보실 수가 있습니다.

http://www.macrocreator.com/help/

많이 사용하시는 마이크로소프트 오피스 제품 중에서 워드나 엑셀에 대한 자동화 등을 배울 수 있고 이미지서치 등을 통해서 웹을 어떻게 자동화 하는지도 배울 수 있습니다. 위 주소에서 나오는 동영상에 나오는 기술들만 제대로 습득 한다면 윈도우 사용 과정에서의 대부분의 것들은 자동화 할수 있을 것이라고 생각합니다.



  1. jetree 2018.09.27 19:58

    좋은 글 잘 보고 있어요. 강좌들 고맙습니다. 그런데, CenterImgSrchCoords 의 경우 Pulover's macro creator외에 사용할 경우 에러가 발생하네요.

    오토핫키 포럼에서 찾아보니
    If you know what's the meaning of "CenterImgSrchCoords()",pls tell us to help you further.라고 하네요.

    macro creator에서만 사용가능한 것인지 궁금합니다.

    • 남성 2018.09.27 21:40 신고

      코드 생성해서 함수를 확인해 보면 일반적인 Autohotkey 코드로 되어 있으므로 툴 디펜던트한 코드는 아닙니다. 저도 macro creator 아닌데서도 잘 사용하고 있구요.

  2. 뚜두 2019.03.26 12:17

    pmc(pulover's macro creator)가 오토핫키 언어로 이루어져있다고하던데 그럼 pmc에서 나오는 소스코드를 오토핫키에 그대로 복사해서 실행하면 실행가능한가요?
    컴파일해서 사용하고싶은데 pmc는 컴파일을 지원하지 않는거같아서요 ㅠㅠ

    • 남성 2019.03.26 13:22 신고

      Pulover's Macro Creator 에 ahk 로 내보내기 해서 사용하면 됩니다.

    • 뚜두 2019.03.26 13:28

      그럼제가 이미지서치 이용하는데 스크린샷은 그대로 두어도 되는건가요?
      ahk로 내보내기 하는 방법도 알려주시면 감사하겠습니다 ㅠㅠ

    • 남성 2019.03.26 21:59 신고

      file 메뉴 보면 export to AHK 라고 있습니다.

Autohotkey 1.1.29.00 버전으로 업데이트를 한 이후에 Windows 10 에서 WinMove 함수 사용시 문제가 있더군요. 그래서 저는 Autohotkey 를 이전 버전으로 다운그레이드를 했었는데 최근에 업데이트 된 1.1.29.01 도전을 보니 이 부분이 해결이 됐더군요.

Windows 10에서 Autohotkey WinMove 함수 사용시 문제가 있었던 분들은 1.1.29.01 버전을 설치 하시면 될 것 같습니다.


Autohotkey 를 사용하여 특정 프로그램에 명령어를 날릴 때 send 명령어를 주로 사용 하곤 합니다. 그런데 send 명령어는 activation 된 창에만 명령어를 날립니다. 이렇게 되는 경우 send 명령어를 사용하는 중에는 사용자가 다른 작업을 할 수가 없습니다. 이러한 경우에 비활성창에 명령어를 실행 시키는 ControlSend 를 사용하면 다른 작업을 하면서 Autohotkey 를 사용하여 특정 프로그램을 자동 할 수 있습니다.

ControlSend 명령어에 대한 설명은 아래 주소의 메뉴얼을 확인하시기 바랍니다.

https://autohotkey.com/docs/commands/ControlSend.htm

저는 Synology NAS 를 사용하고 있고, Windows 운영체제에서 Synology NAS 에 접속하는 경우 putty 를 사용하는데 아래와 같은 Autohotkey 스크립트를 주로 사용하고 있습니다.

SetTitleMatchMode, 2

SetKeyDelay,-1,-1

ControlSend,,./mod_files.sh,PuTTY,

위 Autohotkey 코드는 PuTTY 에 ./mod_files.sh 를 타이핑 하도록 하는 명령어 입니다. 언뜻 봐서는 문제가 없어 보였는데 계속해서 실행시키다 보니 아래와 같은 문제가 있었습니다. 아래 그림에서 밑줄 친 부분을 보면 명령어가 다른 것을 확인할 수 있습니다. 결국엔 위 코드에서 ControlSend 명령어가 정확하게 동작하지 않는것을 알 수가 있습니다.

위 문제를 확인한 후에~ 내가 ControlSend 명령어를 잘못 썼나? 라는 생각을 했었는데 사실 문제는 SetKeyDelay 에 있었습니다. SetKeyDelay 명령어에서 -1 은 no delay 를 의미하고 첫 번째, 두 번째 아규먼트는 Delay, PressDuration 을 의미 합니다. 이 부분을 no delay 로 설정 하다 보니 문제가 발생한 것이었습니다. 그래서 해당 부분을 지우고 코드를 실행해 봤습니다.

SetTitleMatchMode, 2

ControlSend,,./mod_files.sh,PuTTY,

여러번 실행을 해 봤는데 한 번도 빠짐없이 명령어가 전달 되더군요.

ControlSend 를 사용하는 중에 혹시나 문제가 발생한다면 SetKeyDelay 를 의심 해 보시기 바랍니다.



요즘 네이버 댓글 조작 사건으로 인해서 정치권이 시끄럽습니다. 드루킹 일당이 매크로 프로그램을 사용하여 대한민국 국민들이 가장 많이 사용하고 있는 포털인 네이버 기사의 댓글을 조작했다는 사건입니다. 네이버 댓글 조작 사건으로 인해서 보수 정당에서는 특검을 요구하고 있고 자유한국당의 김성태 원내대표는 최근까지 단식을 했었죠. 저는 개인적으로 댓글을 잘 안 봐서 이게 왜 이렇게 문제가 되나라는 생각을 했었는데, SBS 뉴스토리를 확인해 보니 많은 사람들이 댓글을 확인하고 그에 대해서 직간접적으로 영향을 받는다고 합니다. 그런데 사실 개발자 입장에서 생각해보면 이런 댓글 조작은 뒤늦게 발견은 가능하겠지만 막을 수는 없을 것으로 생각됩니다.

SBS 뉴스토리 ‘디지털 함정 인터넷 여론 조작’편을 보다 보니 어떤 사이트에 아이디를 자동으로 만드는 프로그램이 소개 되더군요. 바로 오토핫키 였습니다.

방송에 출연한 개발자 분은 scite4autohotkey 에디터 환경에서 Autohotkey 를 사용하여 한 사이트에 자동으로 회원에 가입하고 아이디를 만드는 데모를 보여주더군요. 방송에서는 이런 프로그램을 만드는데 한 30분 정도면 된다라고 소개를 했었는데 그마만큼 Autohotkey 는 생산성이 정말 좋은 언어라고 생각 합니다. 아래 화면과 같이 데모를 위한 간단한 GUI 프로그램도 단 몇 분만에 만들 수 있습니다.

방송에서는 Autohotkey 의 아주 일부 기능만 소개를 했는데 사실 오토핫키는 윈도우 환경에서 정말 많은 것들을 자동 할 수 있습니다. COM(Component Object Model) 도 사용할 수가 있어서 Microsoft Office 제품들도 자동화 가능하고~~

http://iamaman.tistory.com/458

http://iamaman.tistory.com/1625

http://iamaman.tistory.com/1996

아래 포스팅에서 소개한 바와 같이 이베스트증권에 xingAPI 를 사용하여 시스템 트레이딩에도 사용할 수가 있습니다.

http://iamaman.tistory.com/2224

저 개인적으로는 현재의 Autohotkey 는 수치 연산 분야를 제외한 대부분의 분야에서 효율적으로 사용이 될 수 있을 것이라고 생각됩니다.

윈도우 컴퓨터를 사용하는 많은 분들이 Autohotkey 를 사용해 보셨으면 하고 오늘부터 한번 공부 해 보시는 건 어떨까요? 여러분들의 컴퓨터 사용 업무 생산성이 팍팍 증가하는 것을 느낄 수 있을 겁니다.



오늘은 Autohotkey를 통해 증권사 API를 사용하는 방법에 대해 소개하려합니다. 일단 증권사 API를 사용하기 위해서는 증권사 API 의 설치나 TR과 같은 기본적인 개념에 대해 알아야 되겠고, 해당 내용들은 아래 주소의 ’파이썬으로 배우는 알고리즘 트레이딩’ 이나 증권사의 API 메뉴얼을 참조하시기 바랍니다.

파이썬으로 배우는 알고리즘 트레이딩: https://wikidocs.net/book/110

이베스트증권 API 메뉴얼: http://www.ebestsec.co.kr/apiguide/guide.jsp?cno=100

시스템 트레이딩을 위한 언어로 많은 분들이 C#, 파이썬, C/C++ 등을 사용하고 있는 것 같습니다. 보통 증권사의 시스템 트레이딩을 위한 API는 DLL 버전과 COM(Component Object Model) 버전을 제공해 주더군요. 저는 개인적으로 COM 버전이 사용하기가 쉬워서 COM 버전을 사용하고 있습니다. 시스템트레이딩을 위한 언어로는 파이썬을 사용하고 있고요.

Autohotkey 를 사용하여 시스템트레이딩을 한다고 하는 분은 지금까지 한번도 보지못했는데, COM 을 사용하다 보니 Autohotkey 를 사용해도 될 것 같다는 생각이 들었고, 시도해 보니 그리 어렵지 않게 이베스트증권 xingAPI 를 사용할 수 있었습니다.

Autohotkey 를 사용하여 시스템 트레이딩을 하기 위해서는 32비트 Autohotkey 를 설치해야 합니다. 저는 아래 주소에서 Autohotkey 를 다운로드 받았고 Windows는 64비트 이지만 유니코드 32비트 버전을 설치 했습니다. 이베스트증권의 xingAPI 가 32비트 버전이라 Autohotkey 도 그에 맞춰서 설치를 했습니다.

https://autohotkey.com/download/

xingAPI 의 기본적인 개념에 대해 안다는 가정하에, Autohotkey를 사용하여 이베스트증권에 로그인을 하고 계좌번호를 불러오는 방법에 대해서 소개해 보려 합니다.

Autohotkey 를 사용하여 이베스트증권에 로그인 하고 계좌번호를 불러오는 코드는 다음과 같습니다.

Autohotkey 에서 COM 객체를 만들기 위해서는 ComObjCreate() 라는 함수를 사용하고 xingAPI 가 event 방식으로 동작하므로 ComObjConnect() 라는 함수를 사용하여 세션 객체를 Login 이라는 이벤트에 연결 시켰습니다. 이렇게 연결을 해 놓은 상태에서 ID, 비밀번호, 공인 인증서 비밀번호를 넣고, COM 객체의 login() 함수를 통해 이베스트증권 서버에 로그인을 시도하면 Login 이라는 event 명으로 응답이 오게 됩니다.

Autohotkey 의 ComObjConnect() 라는 함수의 정의는 아래와 같은데 저는 Prefix 로써 session_ 이라는 글자를 넣어줬고 session_Login 이라는 event 를 받는 함수를 만들어 줬습니다.

https://autohotkey.com/docs/commands/ComObjConnect.htm

ComObjConnect(ComObject, Prefix)

로그인이 정상적으로 된 경우 Login event 의 argument 인 code 값으로 0000 이 전달 되게 되고 코드의 중간에 있는 while 루프는 증권사의 응답을 기다리기 위해 넣어놓은 것 입니다.

로그인이 완료 된 이후에는 xingAPISession 인스턴스의 GetAccountListCount() 함수를 사용하여 계좌의 개수를 알 수 있습니다. 이후 계좌의 갯수만큼 루프를 돌면서 GetAccountList() 함수를 통해 계좌 번호를 알아내게 됩니다. Autohotkey Loop 내의 인덱스의 A_Index 는 1 부터 시작하지만 GetAccountList() 함수는 0 인덱스부터 시작하기 때문에 -1 을 해 준 것입니다.

본인의 이베스트증권 ID, PASSWORD, 공인인증서 비밀번호를 넣고 위 코드를 실행시켜 보면 다음과 같이 로그인이 정상적으로 됐다는 message box 와 보유한 계좌번호에 대한 message box 를 아래와 같이 확인할 수 있습니다.

※ 로그인 성공

※ 보유한 계좌 개수

※ 계좌 번호



  1. 이베스트 2018.10.06 22:40

    이베스트로 tr조회하려는데 도저희안되서그럽니다.혹시 뭐가 잘못되었는지 알수 있을까요?
    제공하신소스다음에 다음과 같이 했는데 안되서 그럽니다.뭐가 잘못된건지..알려주시면 감사하겟습니다.
    XAQuery_t1101 := ComObjCreate("XA_DAtaSet.XAQuery")
    XAQuery_t1101.ResFileName:="C:\eBest\xingAPI\Res\t1101.res"
    XAQuery_t1101.SetFieldData("t1101InBlock","shcode",0,"078020")
    XAQuery_t1101.Request(false)
    XAQuery_t1101_ReceiveData(szTrCode)
    {
    sName:=XAQuery_t1101.GetFieldData("t1101OutBlock","hname",0)
    }
    msgBox,%sName%
    하면 아무런 결과가 나오지를 않습니다.

    • 남성 2018.10.07 18:08 신고

      Request 를 한 이후에는 위 포스팅 내용처럼 while 문 등을 통해서 서버에서 응답이 올때까지 기다리게 해야 할 것입니다. 그리고 XAQuery_t1101_ReceiveData 함수는 ComObjConnect 를 통해 event binding 이 되어야 할 것입니다.

  2. 이베스트 2018.10.07 19:59

    정말 감사합니다.방장님. 죄송한데 코드를 조금만 고쳐주시면 안될까요? 초보라서 그런지 많이 어렵네요.ㅠ ㅠ 말씀하신대로 해봐도 안되네요.

Autohotkey 를 사용하다보면 한글 키보드에만 있는 특수키들을 사용하여 단축키를 만들고 싶은 경우가 있습니다. 이러한 경우엔 당연히 특수키에 대한 키코드를 알아야 됩니다. 그래서 오늘은 키코드 확인 하는 방법에 대해서 소개해 보려 합니다.

요즘에는 한자를 사용할 일이 그렇게 많이 없다 보니 스페이스바 왼쪽 옆에 있는 한자키를 거의 사용을 하지 않습니다. 그래서 저는 한자키를 다른 키와 조합해서 Autohotkey 로 단축키를 만들어서 사용하곤 합니다. 키코드를 알기 위해서는 Autohotkey KeyHistory 를 보면 되는데 KeyHistory 는 두가지 방법으로 접근 가능합니다.

1. 코드를 사용한 접근 방법

아래의 Autohotkey 코드를 실행 시킨후에 한자 키를 몇 번 누르고 h 버튼을 누릅니다.

h:: ; KeyHistory 실행 단축키 : h

KeyHistory

return

esc::exitapp ; 종료 : esc

그러면 다음과 같이 KeyHistory 창이 나타나게 됩니다. 저는 위 코드를 실행 하고~ 한자키를 3 번 누른 후에 h 버튼을 눌러서 KeyHistory 창을 나타나게 했습니다. 아래 그림에서 확인할 수 있는 바와 같이 제가 사용하는 키보드에 한자키의 키코드는 VK 19, SC1F1 입니다. 이 중에서 SC1F1 을 단축키로 설정 하면 되는 것입니다.

아래는 한자키와 그 옆에 있는 Alt 키를 사용하여 단축키를 설정해 본 것입니다. 아래 Autohotkey 코드를 실행 한 후에 왼쪽 Alt 키와 한자키를 동시에 누르면 메모장이 실행 되는 것을 확인할 수 있습니다.

~LAlt & sc1F1::

run notepad.exe

return

2. 윈도우 작업바에서 현재 실행되고 있는 오토핫키 아이콘에서 오른쪽 클릭을 하고 나오는 메뉴에서 Open 을 클릭합니다.


그럼 다음과 같은 창이 나타나는데 위에 메뉴 중에 View -> Key History And Script Info 를 클릭하거나 Ctrl + K 를 눌러서 KeyHistory 창을 실행 시킬 수 있습니다.

키코드를 알아내고자 하는 키를 몇 번 누른 후에 F5 키를 눌러서 새로고침을 하면 1 번에서의 결과와 마찬가지로 키코드를 알아낼 수 있습니다.



아래 포스팅에서 Autohotkey 에서 Windows COM(Component Object Model) 을 사용한 사례에 대해서 소개를 한 적이 있습니다. Windows 컴퓨터 사용시 많이들 사용하는 Microsoft Office 제품을 사용할 때도 COM 을 사용하여 자동화를 할 수가 있습니다.

http://iamaman.tistory.com/1879

http://iamaman.tistory.com/461

http://iamaman.tistory.com/2001

http://iamaman.tistory.com/2021

Autohotkey 에서 COM 을 사용하기 위해서는 아래 메뉴얼 같이 COM object 를 만들어야 합니다.

https://autohotkey.com/docs/commands/ComObjCreate.htm

ComObjCreate의 입력값으로 CLSID 를 넣어줘야 하는데 CLSID 는 우리가 사용하고자 하는 COM 의 Program ID 입니다.

ComObject := ComObjCreate(CLSID [, IID])

탐색기 정보 등을 자동화 하고 싶으면 Shell.Application, Microsoft Word 를 자동화하고 싶으면 Word.application, Microsoft Powerpoint 를 자동화 하고 싶으면 PowerPoint.Application 을 넣어야 하는 식입니다.

COM 을 사용하기 위해서는 당연히 우리 컴퓨터에 사용할 수 있는 COM 이 어떤게 설치가 되어 있는지를 알아야 합니다. Microsoft Office 제품과 같이 우리가 설치한 경우에는 당연히 알 수 있겠지만 다른 프로그램들 같은 경우에는 어떤 이름을 사용해야 COM 을 사용할 수 있는 건지 잘 모르는 경우가 많습니다.

그래서 오늘은 Powershell 을 사용하여 우리 컴퓨터에 설치되어 있는 COM 을 검색하는 방법에 대해서 소개하려합니다. 해당 코드는 Powershell 코드이며 ‘개발자를 위한 Powershell’ 책의 예제에 있습니다.

책의 전체 소스 코드들은 아래 주소에서 다운로드 받을 수 있습니다.

https://github.com/dfinke/powershell-for-developers

그리고 아래 주소의 GetProgID 함수를 사용하면 우리 컴퓨터에 설치되어 있는 COM 을 검색할 수 있습니다.

https://github.com/dfinke/powershell-for-developers/blob/master/chapter10/GetProgID.ps1

Powershell 에서 다음과 같이 ps1 파일을 실행하면 되는데…..

.\GetProgID.ps1

내 컴퓨터에 몇 개의 COM 이 설치되어 있는지 확인을 해보려면 다음과 같이 명령어를 치면 됩니다. 제 컴퓨터에는 1800개 COM 이 있네요.

.\GetProgID.ps1 | measure


1800 개를 눈으로 확인하는 건 조금 불편 하니까 키워드로 검색하는 것이 좋습니다. 다음과 같이 word 를 검색해보면 Word.Application 뿐만 아니라 내가 잘 알지도 못하는 다양한 COM 들이 설치 되어 있다는 것을 알 수가 있습니다. 검색 되는 목록 중에서 Word.Application 을 사용 하면 되는 것이죠.

.\GetProgID.ps1 word


이베스트 xingAPI를 사용해서 시스템 트레이딩을 하시는 분들은 다음과 같이 검색해보시면 COM 이 나오는 것을 확인 하실수 있습니다. xingAPI 를 설치했으므로 검색이 되는 건 당연하겠죠.

.\GetProgID.ps1 XA_DataSet

.\GetProgID.ps1 XA_Session


저는 개인적으로 요즘 이베스트 xingAPI를 통해서 시스템 트레이딩을 조금씩 공부 해 보고 있는데, 컴퓨터 언어는 주로 파이썬을 사용하고 있습니다. 생각해보니 Autohotkey 나 Powershell 을 사용해서도 시스템 트레이딩이 가능할것도 같네요.



얼마 전 어떤분께서 Windows에서 광클릭으로 하는 스크립트를 궁금해 하시더군요. 아시는 분은 아시겠지만 Autohotkey 를 사용하면 이런 기능들은 매우 쉽게 만들 수가 있습니다. 질문하신 분은 아마도 게임을 하는데 사용하시는 것 같더군요.

어쨌든 Autohotkey 를 사용하여 광클릭으로 하는 스크립트는 아래와 같습니다. 마우스 왼쪽 버튼을 계속 누르고 있으면 해당 부분을 광클릭 하게 되는 코드입니다. Esc 를 누르면 해당 스크립트파일이 종료 됩니다.


~LButton::

while GetKeyState("LButton", "P")

{

Click

Sleep, 5

}

return


Esc::

ExitApp


sleep 를 안 넣으면 클릭이 너무 빨라서 렉에 걸린다고 하네요. 각자 용도에 맞게 sleep 시간을 조절해 보시기 바랍니다.



여러분들은 포스팅을 할 때 tag 를 잘 작성 하시는지 모르겠습니다. 저는 개인적으로 tag를 사용한 블로그 검색을 많이 합니다. tag 를 사용한 블로그 검색은 아래와 같이 할 수 있습니다.

http://iamaman.tistory.com/tag/검색할키워드

그래서 블로그에 글을 작성할 때 tag 를 잘 넣으려고 노력하는 편입니다. 그런데 사실 우리가 키워드를 뽑아내서 tag 를 작성하는게 조금 귀찮은 일이긴 합니다. 그래서 오늘은 제가 매우 좋아하는 ditto 와 Autohotkey를 사용하여 티스토리 글 작성시 tag 를 조금더 쉽게 넣는 방법을 소개 해 보려 합니다.

첫 번째로 필요한 프로그램인 ditto 는 아래 포스팅에도 소개를 한 적이 있는데 ‘윈도우용 clipboard 프로그램’ 입니다.

http://iamaman.tistory.com/737

ditto 를 설치 안 하신 분들은 위 포스팅을 보시고 설치하시면 되고 ditto 의 기본 단축키는 Ctrl + `(back-quote) 입니다. back-quote 는 키보드에 숫자 1 왼쪽에 있는 키입니다. ditto 프로그램을 설치후 실행 한 후에 위 단축키를 누르면 아래와 같이 클립보드에 저장된 내용들이 나옵니다.

두 번째로 필요한 프로그램인 Autohotkey 는 아래 주소에서 다운로드 후 설치 하시면 됩니다.

https://autohotkey.com/download/

그리고 필요한 Autohotkey 코드는 아래와 같습니다. 아래 코드는 단축키 win + ,(쉼표) 를 누르면 줄바꿈기호를 쉼표(, )로 만들어 주는 코드입니다. 아래 코드를 메모장에 작성 후에 ahk 라는 확장자명으로 저장하고 실행해 줍니다.

#,::          ; 단축키 win + ,

Clipboard := RegExReplace(Clipboard,"`r`n",", ")

return

이제 준비는 다 된 것 같습니다.

1. 내가 작성한 포스팅 중에서 태그로 넣고 싶은 문구들을 복사합니다.

2. 다음으로 Ctrl + `(back-quote) 단축키를 눌러서 ditto 를 실행합니다.

3. ditto 창에서 tag 로 넣을 키워드들을 선택합니다. ditto 에서 선택하는 방법은 Ctrl + A 를 눌러서 다 선택하거나, Shift + 위아래 화살표 를 눌러서 선택하거나 Ctrl + 왼쪽클릭 을 통해서 선택할 수 있습니다.

4. ditto 에서 다 선택한 후에는 엔터를칩니다. 그럼 이렇게 내가 복사 했던 키워드 들이 클립보드에 들어가게 됩니다.

5. 이제 마지막으로 Autohotkey 로 만들었던 단축키인 win + , (쉼표) 를 눌러 줍니다. 이후에 메모장 등에 Ctrl + V 를 해서 붙여 넣어 보면 아래와 같이 쉼표로 구분된 내용이 만들어 집니다.

6. 티스토리 블로그 글쓰기 창에서 태그 부분에 아래와 같이 붙여 넣기 합니다.

7. 그리고 엔터를 치면 다음과 같이 태그가 들어간 것을 볼 수가 있습니다.

조금 연습을 해야 되겠지만 손에 익숙해지면 ~ 다량의 태그를 넣는 경우 매우 편리하게 사용할 수 있습니다.



여러분들은 PC를 사용 해서 얼마나 반복적인 일들을 하시나요? 제가 회사에서 본 많은 분들은 반복적인 PC 작업을 하면서 해당 부분을 자동화 하려는 노력들을 잘 하지 않더군요. 저는 개인적으로 이런 부분들이 굉장히 답답하다고 생각하고 Autohotkey 와 같은 도구를 사용하여 반복 적인 작업들을 자동화 하는 것이 현대 사회의 경쟁력이라고 생각합니다. 제가 Autohotkey 를 사용한지는 거의 7~8년 정도 된 거 같네요. 지금은 Autohotkey 가 없으면 PC를사용하는게 싫다고 생각할 정도로 Autohotkey 를 좋아합니다.

요즘은 한가지 프로그램만을 사용하여 일을 하시는 분들은 별로 없을 거라고 생각을 합니다. 워드, 엑셀, 파워포인트 문서를 작성하면서 메모장을 사용하고 첨부할 그림을 수정하고 메일을 보내고 등등 한가지 작업을 하는데 다수의 프로그램들을 동시에 사용하는 경우가 많이 있습니다.

마이크로소프트 오피스 제품 한가지만 사용한다면 VBA 만 공부해서 사용하면 되겠지만, Windows 내의 다수의 프로그램을 복합적으로 사용한다면 VBA 만으로는 자동화를 하기가 힘듭니다. 이럴 때 유용하게 사용할 수 있는 윈도우 전용 스크립트 언어가 Autohotkey 입니다.

제 블로그를 방문 하시는 분들은 아시겠지만 저는 다음과 같이 오토핫키 와 관련된 포스팅을 종종 하고 있습니다.

http://iamaman.tistory.com/category/programming%20language/Autohotkey

그리고 거의 매일 오토핫키 업데이트 내역을 확인하는데 바로 어제 또 업데이트 됐더군요. 자주 업데이트가 되는 걸로 봐서 Autohotkey 프로젝트가 잘 관리가 되고 있는 것으로 보입니다.

https://autohotkey.com/download/

많은 분들이 오토핫키의 이미지 서치 기능을 사용하여 게임 매크로를 만드는데 사용하시는 걸로 보이는데~ 게임 자동화 이외에도 오토핫키는 정말 많은 것들을 할 수 있는 스크립트 언어입니다. 윈도우 사용시 하는 거의 대부분의 작업들을 자동화 할 수 있습니다.

저는 소프트웨어 개발자로 일하면서 제가 필요한 많은 툴들을 오토핫키를 사용하여 그때 그때 만들어서 사용하고 있고, 몇 년간 그렇게 하다 보니 생산성이 엄청나게 높아진 걸 느낄 수가 있습니다.

우리나라는 거의 대부분의 분들이 Windows 운영체제를 사용 하실 텐데 오토핫키를 적극적으로 사용해보시길 추천드립니다.



+ Recent posts