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 를 좋아합니다.

 

컴퓨터에 대한 배경 지식이 별로 없어서 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