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

 

회사에서 주로 윈도우를 사용하는 관계로 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 실행은 괜찮게 돌아가는 것 같네요.

  1. 광영 2018.03.05 22:52 신고

    잘 봤습니다. 아무래도 화면제어 쪽이 필요한 일이 있어서 알아보다가, 파이썬으로 제어를 찾다 보니 여기까지 검색으로 흘러 들어왔습니다. 게시물들 잘 보겠습니다.

  2. 2018.03.12 08:49

    비밀댓글입니다

  3. 안준 2018.03.12 09:16

    안녕하세요 파이썬 게시판 항상 열심히 보고있었습니다~
    저도 자동화에 많은 관심이있는데요,
    파이썬, 오토핫키 두개를 따로 쓰다가 문득 같이 쓰면 좋을거 같다는 생각을했습니다.
    근데 파이썬에서 오토핫키의 장점 키보드 마우스 제어는 해보셨나요?ㅠㅠ
    안되는거같아서요...

    • 남성 2018.03.12 11:48 신고

      파이썬을 사용하여 윈도우를 자동화 하기 위한 라이브러리로 pywinauto 라는 라이브러리가 있습니다. 윈도우 운영체제에서 키보드 마우스를 자동화 하기 위한 것이라면 굳이 파이썬에서 오토핫키를 연동 하려는 노력보다는 pywinauto 와 같이 파이썬 만으로 구성된 라이브러리를 사용하여 보시는게 조금 더 편하실 것 같습니다

Autohotkey 에는 다양한 변수들을 제공해 줘서 프로그래밍을 굉장히 편리하게 만들어 주는데요~

 

보통 Autohotkey 에서 정해진 변수들은 A_ 로 시작하는 변수가 많습니다.

 

루프문의 내부에서는 A_Index 을 사용하면~ 해당 루프의 인덱스를 접근 할 수 있고~ 아래 포스팅에서는 함수를 만들어서 사용했지만 Autohotkey_L 에서는 A_Is64bitOS 라는 변수를 제공해 줘서 64 비트인지 32 비트인지를 확인 할 수 도 있습니다.


2015/01/18 - [programming language/Autohotkey] - Autohotkey 32, 64 비트 구분하기

 

이런 다양한 변수중에 제가 가장 많이 사용하는 변수는 뭐니 뭐니 해도 Clipboard 라는 변수가 아닐까 싶네요.

 

아래 포스팅에서도 언급한 적이 있지만 컴퓨터를 사용하면서 가장 많이 하는 작업이 보통 Copy & Paste 이다 보니 그런 것도 같구요~


2013/11/24 - [유틸] - 복사 붙여 넣기를 편리하게~ Clipjump


2012/11/24 - [유틸] - 윈도우용 clipboard 프로그램 ditto

 

아무튼 오늘은 clipboard 의 값이 변하는 경우 자동으로 작업이 실행되도록 하는 OnClipboardChange 라는 키워드에 대해 설명하려 합니다.

 

이건 마치 Windows Message Hooking 기능과 같은거라고 할 수도 있을 것 같은데

 

윈도 사용 중의 clipboard 변화 하는 것을 알아채서 사용자가 설정한 명령어를 수행하는 겁니다.

 

아래 주소에 간단한 sample code가 있는데~ 한번 실행해보시면 뭔지 딱~~ 아실수 있을 겁니다.

 

http://www.autohotkey.com/docs/misc/Clipboard.htm#OnClipboardChange

 

 

저는 더 간단하게 다음과 같이 코딩 해 봤습니다. 아래 코드는 clipboard 가 변경될때마다 Clipboard Changed 라는 MsgBox 가 나오게 하는 코드 입니다.

 

#Persistent

return

 

OnClipboardChange:

MsgBox, Clipboard Changed ; Clipboard 가 변경될때마다 실행될 명령

return

 

 

OnClipboardChange: 와 return 사이에 Clipboard 변경 시마다 실행할 명령을 써 주면 되겠죠~

 

위 예는 정말 간단한것이지만 응용을 해 보면 정말 다양한 기능들을 만들어 낼 수 있을 것 같더군요.


오늘은 윈도우 운영체제에서 Autohotkey 마우스 제스쳐 기능을 사용할 수 있도록 해주는 Lex' Mouse Gestures 라는 스크립트에 대해 소개해 드리려 합니다.

 

Mouse Gestures 란 말 그래도 마우스의 움직임에 따라 다른 동작이 되도록 하는건데요~

 

파이어 폭스와 같은 브라우저에서는 All-in-One Gestures 라는 플러그인이 있는데~ 아래 주소를 보니 이와 유사한 기능을 하도록 만들었다고 하네요

 

오늘 소개 드리는 Autohotkey 스크립트는 Lex' Mouse Gestures입니다. Lexikos 라는 분이 만들었고~ 이 분은 Autohotkey_L 을 만든 분으로도 유명하죠. 스크립트는 아래 주소에서 다운로드 받을 수 있습니다.

 

http://www.autohotkey.com/board/topic/23596-lex-mouse-gestures/

 

아래 그림과 같이 Download 를 클릭해서 다운로드 받으셔도 되고~

 

아래 링크를 클릭해서 다운로드 받을 수도 있습니다.

 

http://www.autohotkey.net/~Lexikos/mg/Gestures.zip

 

혹시나 링크가 포럼에 파일이 없어질 수도 있으니 파일도 올려 놓도록 하겠습니다.

 


Gestures.zip


 

혹시 Autohotkey 가 설치 안되어 있는 분들은 아래 주소에서 Autohotkey 를 설치하시기 바랍니다. 아래 주소에서는 Autohotkey_L 을 다운로드 받을 수 있습니다. Autohotkey_L 은 오늘 소개하는 Lex' Mouse Gestures를 만든 Lexikos 라는 분이 만든 Autohotkey 빌드 입니다.

 

http://ahkscript.org/

 

Autohotkey basic 을 설치 하실 분들은 아래 Autohotkey 공식 홈페이지에서 다운로드 받아서 설치하면 됩니다.

 

http://www.autohotkey.com/

 

Gestures.zip 파일을 다운로드 받은 후에~ 압축을 풀고~ Gestures.ahk 파일을 실행하면 Lex' Mouse Gestures 를 사용 할 수 있습니다.

 

위 캡쳐 화면에도 설명이 있지만 몇 가지 기능에 대해 간단히 설명 드리도록 하겠습니다.

 

오른쪽 마우스 버튼을 눌러서 동작 시키게 되고~ 아래와 같은 동작이 있습니다.

 

왼쪽으로 드래그 : browser 뒤로

오른쪽으로 드래그 : browser 앞으로

아래 → 오른쪽으로 드래그 : 현재 열려 있는 창 닫기

오른쪽 → 아래 → 왼쪽 → 위로 드래그 : 스크립트 리로드, 동작이 정상적으로 됐을 때 폴더에 들어있는 wurt_enabled.wav 라는 음이 들리면서 실행됩니다.

왼쪽 → 아래 → 오른쪽 → 위로 드래그 : Gestures.ini 파일 편집, 동작 시 아래와 같은 화면이 나타나고 편집하기 위하는 파일을 선택하면 됩니다. 아래 그림에서 보다 시피 Default 동작 뿐만 아니라 사용자 동작 도 설정 할 수 있습니다.

 


왼쪽 → 아래로 드래그 : 액티브 창 최소화

오른쪽 → 위로 드래그 : 액티브 창 최대화

왼쪽 → 오른쪽 또는 오른쪽 → 왼쪽 드래그 : 최근의 최소화 취소

 

윈도우 버튼을 누르고 위 드래그 동작들을 실행하면 해당 동작들이 Enabled 또는 Disabled 됩니다. Enabled 되었을 때는 wurt_enabled.wav 가~ Disabled 되었을 때는 wurt_disabled.wav 라는 음이 실행 됩니다.

Autohotkey_L을 이용하여 다양한 방법으로 hotstring 을 설정하여 이용할 수 있습니다.

 

MS 워드나 notepad 등에 특수 문자를 입력 할 때 굉장히 번거로운데

 

Autohotkey 를 이용하면 이런 특수문자들도 쉽게 입력 할 수 있습니다.

 

아래 주소의 내용을 참조하여 특수 문자들을 단축키로 입력하는 방법에 대해 설명 드리겠습니다.

 

https://gist.github.com/823381

 

위 주소에 가보면 Autohotkey_L 코드가 나와 있습니다.

 

아래 캡쳐 한 것과 같이 download 를 눌러서 해당 코드를 다운로드 합니다.

 

 

 

압축을 풀면 AutoHotkey.ahk, zzz abandoned.ahk 의 두 개 파일이 있는데 저는 이중에서 AutoHotkey.ahk 파일안의 hotstring 부분의 코드에 대해 설명 드리려 합니다.


줄 번호 146 ~356 까지 입니다. 잘 모르실 분들을 위해 146 번 줄 부분 사진 올리니 참조하시기 바랍니다.


필요한 Hotstring 부분만 포함된 파일은 다음과 같습니다. 필요하신 분들은 다운로드 하여 이용하시기 바랍니다. 



Autohotkey.ahk




 


Autohotkey_L 의 hotstring 이용방법은 굉장히 간단합니다. 아래 코드를 예로 들면 :: 부분이 보이실 텐데 그 앞의 글자를 입력하면 :: 뒷 부분의 글자들이 입력이 되는 형태 입니다. 아래 코드는 kohm 이라고 입력하면 이 입력 되는 hotstring 입니다.


:c1*:kohm::kΩ ; kiloohm

 

해당 내용들을 .ahk 확장자의 파일(UTF-8 encoding)로 저장한 후에 해당 파일을 더블 클릭하면 실행 됩니다.

 

이제 간단하게 사용하는 예를 한번 보도록 하겠습니다.

 

아래 예는 α , β , ± , η 를 입력하는 예인데요.

 


 

 

위 예는 아래 단축키들을 이용했습니다. 단축키를 타이핑 하고 스페이스바를 누르면 입력하고자 하는 특수 문자로 변합니다.

 

:C:|alpha::α

:C:|beta::β

:?*:+-::±

:C:|eta::η


위 예 뿐만이 아니라 다른 hotstring 들도 사용해 보시기 바랍니다. 


위 예로 든 메모장 뿐만이 아니라 워드를 비롯한 다른 문서작성 프로그램이나 에디터 등에서도 동일한 방법으로 입력 할 수 있습니다.


지난 포스팅에서 perl 을 이용한 워드 문서 생성 자동화에 대해 간략히 소개 드렸었는데요.



2012/01/11 - [컴퓨터일반] - Perl을 이용한 MS word 문서 생성 자동화


 

아래 주소의 글을 보니 Autohotkey_L 을 이용한 MS word 에 대한 예제 코드가 있더군요.

 

http://www.autohotkey.com/community/viewtopic.php?t=61509&start=30&p=393082#p393082

 

위 링크의 예제에서 끝에 파일로 저장하도록 수정해 봤습니다.

 

코드는 다음과 같구요~

 

oWord := ComObjCreate("Word.Application") ; create MS Word object

oWord.Documents.Add ; create new document

 

oWord.Selection.Font.Bold := 1 ; bold

oWord.Selection.TypeText("Visit ") ; type text

oWord.ActiveDocument.Hyperlinks.Add(oWord.Selection.Range, "http://www.autohotkey.com/forum/topic61509.html"

,"","","COM Object Reference [AutoHotkey_L]") ; insert hyperlink

oWord.Selection.TypeText("and learn how to work with ") ; type text

oWord.Selection.Font.Italic := 1 ; italic

oWord.Selection.TypeText("COM objects") ; type text

oWord.Selection.Font.Bold := 0, oWord.Selection.Font.Italic := 0 ; bold and italic off

oWord.Selection.TypeText(".") ; type text

oWord.Selection.TypeParagraph ; type paragraph (enter, new line)

 

;~ oWord.Visible := 1, oWord.Activate ; make it visible and activate it.

 

oWord.ActiveDocument.saveas("c:\autohotkeyMSWORD.docx")

oWord.Quit()

 

보시면 아시겠지만 autohotkeyMSWORD.docx 라는 워드 파일이 만들어집니다.

 

매번 반복해서 작성하게 되는 문서는 이런 자동화 툴들을 이용하면 편리하겠죠~

 

작성된 결과는 이렇게 보이더군요~




 


아래 포스팅에서 워드 매크로에 대한 단축키 설정에 대한 부분이 나오는데요.

 


2012/08/01 - [컴퓨터일반] - MS 워드 VBA 그림 폭 맞추기



구글링을 해보니 이러한 워드 단축키 설정은 Autohotkey_L 을 이용해서도 가능하더군요.

 

다음 코드는 워드 매크로를 실행하기 위한 Autohotkey_L 코드 입니다.

 

RunMSWordMacro(MacroName) 함수를 보시면 간단히 word object 를 생성해주고 MacroName 라는 이름의 워드 매크로를 실행해주는 아주 간단한 코드입니다.

 

RunMSWordMacro(MacroName) {           ; MacroName : 매크로 이름

oWord := ComObjActive("Word.Application")

oWord.Run(MacroName)

}

 

#!1::            ; 단축키 win + alt + 1

RunMSWordMacro("Figure_Attributes")

return

 

저는 위 링크된 포스팅에서 소개했던 Figure_Attributes() 함수를 실행하는 단축키를 작성해 봤습니다.

 

Win + Alt + 1 을 누르면 Figure_Attributes() 함수가 실행됩니다.

 

사용해 보니 굉장히 편리하더군요.


문서를 작성하다 보면 대소문자 변환이 은근 짜증나게 느껴질 때가 있습니다.

 

사용하시는 프로그램에 따라 이런 대소문자를 변환해주는 단축키 등으로 변환할수 있는 프로그램도 있고 그렇지 않은 프로그램도 있죠~

 

MS 워드 같은 경우에는 대소문자 변환 단축키를 제공하는데요.

 

변환하고자 하는 영어 단어를 블록을 잡은 후에 Ctrl +Shift + A 를 하면 대문자 소문자가 변환이 됩니다.

 

워드와 같이 단축키를 제공해주는 경우야 쉽게 변환 가능 하지만 그렇지 않은 프로그램에서는 대소문자 변환 하려고 생각하면 귀찮아 지는데요.

 

오늘은 이러한 대소문자를 쉽게 변환하게 해 주는 Autohotkey_L 단축키를 소개하려 합니다.

 

Autohotkey_L 의 StringUpper, StringLower 함수를 사용하면 되는데요.

 

함수의 정의는 아래와 같구요~

 

StringLower, OutputVar, InputVar [, T]
StringUpper, OutputVar, InputVar [, T]

 

함수의 의미는 InputVar 을 OutputVar 에 대소문자 변환하여 저장한다는 거구요~ 맨 뒤의 T 는 title case 라고 해서 단어의 맨 앞 글자만 대문자로 변환해 주는 겁니다.

 

제가 간단하게 작성한 코드는 다음과 같습니다.

 

+#u:: ; shift + win+ u, 대문자로 변환

Send, ^c

ClipWait, 2

Send, {Delete}

StringUpper, Clipboard, Clipboard

Send, ^v

return

 

^+#u:: ; ctrl + shift + win+ u, title case 로 변환

Send, ^c

ClipWait, 2

Send, {Delete}

StringUpper, Clipboard, Clipboard, T

Send, ^v

return

 

+#l:: ; shift + win+ L, 소문자로 변환

Send, ^c

ClipWait, 2

Send, {Delete}

StringLower, Clipboard, Clipboard,

Send, ^v

return

 

그럼 위에 코드를 .ahk 파일로 저장 하시구~ 더블 클릭해서 실행 시키세요~

 

그리고 다음과 같이 사용 할 수 있습니다. 간단하게 메모장에 다음과 같은 글자가 있을 때~

 

 

블록을 지정한 후에 Shift + Win+ U 를 누르면~ 요렇게 대문자로 바뀌구요~

 

 

블록을 지정한 후에 Ctrl +Shift + Win+ U 를 누르면~ title case 로 바뀌구요~

 

 

블록을 지정한 후에 Shift + Win+ L 을 누르면~ 요렇게 소문자로 휘리릭 바뀝니다.

 

 

대소문자 변환 참~~ 쉽죠~~


Autohotkey_L 을 이용하면 윈도우 COM (Component Object Model)도 쉽게 다룰 수 있다고 하는데요~

 

아직 COM 에 대해서는 제대로 몰라서 자유 자재로 사용하지는 못하지만 그 사용 가능성이 무궁무진 하다고 생각되서 열심히 구글링을 하고 있습니다.

 

검색을 하다 보니 아래 주소의 글을 발견했는데요.

 

http://aboutscript.com/blog/posts/313

 

Autohotkey_L 을 이용하여 구글 검색을 하는 간단한 예이지만 꽤 유용한 예라고 생각되서 소개 드리려 합니다.

 

코드는 다음과 같습니다.

 

pwb := ComObjCreate("InternetExplorer.Application") ; 익스플로러 object

pwb.visible := false ; 창 안보이게

pwb.ToolBar := false ;툴바 안보이게

 

InputBox, query ; 사용자 쿼리 받기

query_text:= "https://www.google.co.kr/webhp?hl=ko&tab=ww#hl=ko&newwindow=1&output=search&q=" . query ; 구글 검색 쿼리

 

pwb.navigate(query_text) ; 해당 페이지로 이동

while pwb.ReadyState != 4 ; 창 준비 될때까지 기다리기

    Sleep 100

 

pwb.visible := true ; 창 보이기

 

주석만으로도 이해가 될 만큼 쉬운 코드이지만 단축키 등으로 지정해 쓰면 굉장히 편리 할 거라고 생각되더군요.

 

위 코드를 실행하면 다음과 같이 input box 가 뜹니다.

 

위 그림의 빈칸에 자신이 검색하고자 하는 키워드를 써 넣고 엔터를 치면 google 검색이 돼서 아래 그림처럼 나오게 되죠.

 

위 Autohotkey 코드에서 툴바를 나타내지 않게 설정해서 윈도우 익스플로러 창이 왠지 좀 시원~~ 해 보이죠~


  1. 쥬르날 2012.06.26 05:46 신고

    알아두면 유용할 것 같네요 ^^

    • 남성 2012.06.26 09:05 신고

      윈도우 사용하신다면 적극 추천입니다. Autohotkey 이용하시면 반복작업 하실때 굉장히 편리하게 이용할 수 있습니다.

Autohotkey_L 를 사용하면서 참 쉽고 재미있다는 생각과 굉장히 강력하다는 생각을 동시에 하게 됩니다.

 

윈도우에서만 돌아 간다는게 유일하게 안타까운 점인데요~

 

오늘은 Autohotkey 로 이런 것도 할 수 있다~~ 의 예로서

 

Text-to-Speech 에 대해 간단하게 소개 드리려 합니다.

 

Text-to-Speech 는 말 그대로 문자를 말로 변환해서 스피커로 나오게 하는 건데요.

 

Autohotkey_L 에서는 단 몇 줄로 이런 기능의 구현이 가능 합니다.

 

이에 대한 소개는 아래 주소를 참조하시면 됩니다.

 

http://www.autohotkey.com/community/viewtopic.php?p=391483#p391483

 

소개에 있는 간단한 예제 코드를 돌려 보니깐

 

진짜 신기하고 재미 있더군요.

 

Text := "Hello World!" ; 스피커로 말 할 텍스트

 

SAPI := ComObjCreate("SAPI.SpVoice")

MsgBox, 0, Rate: 0, Speak the Text

SAPI.speak(Text) ; Hellp World 라는 텍스트 말하기

 

MsgBox, 0, Rate: -7, Slow down the Speech

SAPI.rate := -7

SAPI.speak(Text) ; Hellp World 라는 텍스트 느리게 말하기

 

MsgBox, 0, Rate: 7, Speed up the Speech

SAPI.rate := 7

SAPI.speak(Text) ; Hellp World 라는 텍스트 빠르게 말하기

 

 

SAPI.rate := 0 ; set to default rate

 

MsgBox, 0, Volume: 50, Lower the Volume (ranges 0-100)

SAPI.volume := 50

SAPI.speak(Text) ; Hellp World 라는 텍스트를 볼륨 50으로 말하기

 

코드 몇 줄에 이런 게 가능하다니 저는 위 코드 돌려 보고 진짜 신기하다는 생각이 들더군요.

 

SpVoice 와 관련한 다양한 Properties 와 Methods 들은 아래 주소에서 공부 하실 수 있습니다.

 

http://msdn.microsoft.com/en-us/library/ms723602

 

아쉽게도 한글 발음은 안되던데.

 

한국어를 영어 발음으로 바꿔서 해 보니깐 좀 웃기게 들리긴 하더군요. ㅋㅋㅋㅋ

 

위 코드에서 발음할 텍스트를 아래와 같이 바꾸고 실행시켜 보니깐~~

 

Text := "Daehanminkuk"

 

데~에~한 민 쿡 하고 들리더군요. ㅋㅋㅋ

 

한글 발음 방법 알고 계신 분은 댓글 좀~~ 굽신 굽신 ^^;

 

어쨌든 공부 좀 해봐야겠습니다.


Autohotkey_Basic 에서 Autohotkey_L 로 갈아타면서 정말 기초적인 기능에 깜짝 깜짝 놀라네요.

Autohotkey basic 에서는 한글 send 가 제대로 안돼서 clipboard 에 복사 해서 붙여 넣는 형태로 한글을 타이핑 하게 했었는데 ~~

 

Autohotkey_L 에서는 한글도 알아서 잘 되는군요. ㅋㅋㅋㅋ

 

진작 갈아탈걸~~ 아웅 !!

 

간단하게 한글 보내기 예제 하나 만들어 봤습니다.

 

#s::

Send,한글 보내기 `n

Send,English send

return

 

위 코드는 간단하게 Win+s 키를 누르면

 

한글 보내기

English send

 

라고 나오게 되는 예입니다.

 

저는 현재 Autohotkey_L Unicode 버전를 깔았으므로 메모장 등에서 .ahk 파일로 저장 할 때

유니코드로 저장했습니다.

 

위 코드를 실행 시키고 메모장에 커서를 위치 시키고 ~~

 

Win+s 키를 눌러 보면 아래 그림처럼 글자가 써지는 것 확인 할 수 있습니다. 잼나죠~ ㅋㅋ

 


이전 포스팅에서 말씀 드린 데로 저는 Autohotkey 가 없으면 윈도우를 제대로 사용하지 못 할 정도로 Autohotkey 를 좋아합니다.

 

컴퓨터에 대한 배경 지식이 별로 없어서 dllcall() 등에 대해서는 아직까지도 이해가 안 되는 내용들이 많지만~ 그래도 꾸준히 관심을 가지고 있는데요

 

최근에 Autohotkey basic 에서 Autohotkey_L 로 넘어 오게 되었습니다.

 

Autohotkey basic 에 비해 Autohotkey_L 에서는 객체 지향적인 부분에서 특히 두드러진 특징이 있는 것 같더군요.

 

배열이나 COM object 등도 지원을 하고 해서 참~~ 배울 게 많은 것 같더군요.

 

그런데 지금까지 Autohotkey_L 로 넘어오고 싶어도 선뜻 넘어오지 못했던 게 기존의 코드 중 일부가 안 돌아가는 경우가 있어서 입니다.

 

가장 큰 걸림돌은 인코딩 이더군요.

 

Autohotkey_L Unicode 를 사용 하면서 기존 코드의 인코딩이 바뀌면서 정상적으로 동작하지 않는 경우였습니다.

 

이렇게 안 되는 거 일일이 찾아서 바꾸는 게 좀 귀찮기도 하고 제대로 안돼서 기존의 편리함이 없어져 버릴까 걱정도 되고 하더군요.

 

제 코드 중에 뮤토렌트 실행과 관련한 코드 부분이 있는데~

 

이 부분이 Autohotkey_L 로 넘어오면서 정상적으로 안 됐습니다.

 

기존의 코드는 아래와 같습니다.

 

#k::

DetectHiddenWindows, On

 

IfWinExist, ahk_class μTorrent4823DF041B09

{

 

    WinActivate, ahk_class μTorrent4823DF041B09

    WinActivate    

    WinShow

}

else

{            

    Run, "C:\Program Files\uTorrent\uTorrent.exe"

    WinWait, ahk_class μTorrent4823DF041B09

    WinShow

    WinActivate

}

return

 

위 코드는 μTorrent 가 실행 중에 있으면 화면에 보이게 하고 그렇지 않으면 실행 시키는 코드 입니다.

 

기존에 Autohotkey basic 에서는 굉장히 잘 동작했었죠~

 

그런데 Autohotkey_L 로 바뀌면서 정상적인 동작이 안 됐습니다.

 

몇 가지의 실험을 해보니 위 코드의 특수 문자인 μ 가 포함되어 있는 부분 때문이었습니다.

 

그래서 μ 부분 없이 torrent 프로그램을 인식 시키는 방법이 없을까 생각해 보다가 다음과 같은 코드를 만들었습니다.

 

뭐 만족스럽지는 않지만 정상적으로 동작은 하네요.

 

SetTitleMatchMode 2

#k::

DetectHiddenWindows, On

 

IfWinExist, Torrent 3

{

    WinActivate    

    WinShow

}

else

{            

    Run, "C:\Program Files\uTorrent\uTorrent.exe"

    WinWait, Torrent 3

    WinShow

    WinActivate

}

Return

 

위 코드에서 SetTitleMatchMode 2 로 설정한 것은 제목의 일부라도 일치 하면 IfWinExist가 인식하도록 하기 위한 것입니다.

 

현재 제 뮤토렌트 버전은 3.1.2 이고 프로그램의 타이틀 바는 다음과 같이 구성되어 있습니다.

 

 

타이틀바에 다운로드 정도도 표시되도록 해서 사용하고 있는데~

 

이러한 부분은 계속 변하는 부분이어서 특정한 값으로 μTorrent 를 구분하기가 어렵기 때문에~~

 

제목 중에서 변하지 않는 부분의 일부인 Torrent 3이 타이틀에 있으면 인식하도록 설정한 것이죠.

 

향후의 버전 업데이트 될 때를 생각해서 그 뒤의 .1.2 부분은 제외를 시켰습니다.

 

Autohotkey_L 을 사용하면서 저와 같은 문제가 있으신 분들은 참조 하시길~

 

그리고 더 나은 솔루션이 있으신 분들은 댓글 좀 부탁 드립니다.


  1. 행인 2012.05.21 21:21

    정규식을 이요하시면 비교적으로 더 확실하게 타겟을 잡으실 수 있습니다.

    • 남성 2012.05.21 22:00 신고

      아~ 정규식!! 참고 하겠습니다.
      방문해 주셔서 감사합니다. ^^

+ Recent posts