본문 바로가기
programming language/Python

Python에서 Autohotkey 사용하기

by __observer__ 2015. 8. 6.
반응형

개인적으로 자동화에 관심이 많이 있습니다.

 

회사에서 주로 윈도우를 사용하는 관계로 Autohotkey 를 많이 사용하는 편인데~

 

때에 따라서는 python 을 사용할 때도 많이 있습니다.

 

그래서 python 에서 autohotkey 를 사용할 수 있는 방법은 없을까 해서 찾아보니

 

아래와 같이 pyahk 라는 파이썬 모듈이 있더군요.

 

https://pyahk.readthedocs.org/en/latest/

 

아시는 분도 계시겠지만 Autohotkey 는 Autohotkey_L, Autohotkey_H 와 같은 다양한 버전이 있습니다.

 

이중 Autohotkey_H 에는 Autohotkey.dll 이 있어서 다양한 프로그램들에서 Autohotkey 를 사용할 수 있도록 해 줍니다.

 

위에서 소개한 pyahk 역시도 이 Autohotkey.dll을 사용한 모듈 입니다.

 

일단 파이썬에서 pyahk를 설치하기 위해 다음과 같이 pip 를 사용하여 pyahk 모듈을 설치 합니다.

 

pip install pyahk

 

저는 현재 python 2.7 windows 32 비트 버전을 설치하여 사용 중입니다. 현재 pyahk 는 Autohotkey_H ANSI 32-bit Version 1.1.8.1 에 대한 wrapper 이라 합니다. 또한 python 3 에서는 동작하지 않는다고 하네요.

 

다음으로 아래 주소에서 Autohotkey_H 를 다운로드 합니다.

 

http://www.autohotkey.net/~HotKeyIt/AutoHotkey/files/AutoHotkey-txt.html

 

현재 1.1 버전의 직접적인 다운로드 주소는 다음과 같습니다. 크롬에서는 아래 주소의 파일을 다운로드 하려 하니 유해 프로그램 경고가 뜨네요.

 

http://hotkeyit.ahk4.net/AutoHotkey.zip

 

일단 다운로드 후에 압축을 해제 하고 Win32a 폴더에 있는 Autohotkey.dll 파일이 들어 있는 폴더를 환경 변수에 설정하거나 파이썬 프로젝트 내에 Autohotkey.dll 파일을 넣어 줍니다.

 

이제 파이썬에서 테스트를 해보죠.

 

다음은 pyahk 의 홈페이지에 있는 예제 코드인데 Notepad 라는 타이틀의 창이 있는지를 체크하고 있을 때는 HWND 값을 출력합니다.

 

# -*- coding: cp949 -*-

 

import ahk


script = ahk.Script() # Initializes with start and ready commands as above

a = script.winActive("Notepad") # Sets a to the return value of the method

print a # prints the HWND of the found window as an int, or None

script.variable('b', float) # Creates a transparent variable attribute

ahk.execute("Random, b, 0.0, 1.0") # Stores value in `b`

print 100 * script.b # b is retrieved and converted to its saved type (float)

 

다음으로 b 라는 변수를 설정한 다음 Autohotkey random 함수를 사용하여 0~1 사이의 값을 구하고 곱하기 100을 해서 출력하는 예입니다.

 

파이썬 파일의 맨 위에는 cp949로 인코딩 옵션을 넣어 줬습니다.

 

일단 실행을 해보니~ 다음과 같이 정상적으로 동작하더군요.

 

 

그런데 다음과 같이 위에 부분을 주석 처리 하고 실행해 봤습니다.

 

결과를 보시면 아시겠지만 뭔가 이상한 결과가 나오더군요. 변수 메모리 참조를 잘못하는 게 아닌가 하는 생각이……

 

아직은 0.2 대의 버전이니만큼 버그가 있는 걸로 보이네요.

 

좀더 확인을 해 봐야겠지만…… ahk.execute() 함수를 사용한 autohotkey 실행은 괜찮게 돌아가는 것 같네요.

반응형

댓글