본문 바로가기
programming language/Autohotkey

Autohotkey 윈도우 UI 자동화하기 UI Automation

by __observer__ 2022. 6. 28.
반응형

제 블로그에서는 가끔씩 오토핫키에 대해서 소개를 하는데, Windows 운영 체제를 사용할 때 Autohotkey 사용 유무에 따라 생산성이 정말 많이 차이 난다고 생각 합니다.

그런데 오토핫키를 사용하면서 몇 가지 불편한 부분들이 있는데 기존에 제가 생각하던 Autohotkey 의 불편한 부분들은 다음과 같습니다.

1. 패키지 관리도구가 없다.

Python 의 PIP 와 같은 패키지 관리툴을 사용해 보신 분들은 아시겠지만, 패키지 관리툴 유무에 따라 개발 편의성이 굉장히 차이가 있습니다. Autohotkey 에서는 포럼이 있는데~ 해당 포럼에서 괜찮은 라이브러리들을 일일이 찾아보고 다운로드 받아서 사용해야 합니다. 이런 부분들은 다른 인기 있는 언어들에 비해 Autohotkey 가 불편하다고 생각합니다.

2. UI Automation 의 한계가 있다.

Autohotkey 를 사용하면 기존의 Win32 로 되어 있는 UI 들을 자동화 할 수가 있습니다. 그런데 최근에는 많은 프로그램들이 MS UI 로 만들어져 있어서, Autohotkey 로는 자동화의 한계가 느껴졌었습니다. 그래서 저는 UI Automation 를 할때는 Python 의 pywinauto 라이브러리를 사용해 왔습니다.

그런데 아래 유튜브를 보다가 Autohotkey 를 사용하여 UI Automation 을 할 수 있는 라이브러리가 있다는 것을 알게 되었습니다.

 

UIAutomation

Autohotkey UIAutomation 라이브러리 포럼은 아래 주소와 같습니다. 아래 포럼을 들어가시면 샘플부터 자세한 설명들을 볼 수가 있습니다.

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

Autohotkey UIAutomation 라이브러리 코드는 아래 주소에서 다운로드 할 수 있습니다.

https://github.com/Descolada/UIAutomation

위 github 주소에서 코드를 다운로드 받아 보시면 Examples 폴더에서 다양한 예제를 확인할 수 있습니다. 아래 코드는 Example3_Calculator.ahk 코드에 대해 약간 변경을 해서 만들어 본 한글 사용 PC 에서 돌아가는 샘플 코드입니다.

#NoEnv
#SingleInstance force
#Include ..\lib
#include UIA_Interface.ahk

Run, calc.exe
UIA := UIA_Interface() ; Initialize UIA interface
WinWaitActive, 계산기 ahk_class ApplicationFrameWindow
cEl := UIA.ElementFromHandle(WinExist("계산기 ahk_class ApplicationFrameWindow")) ; Get the element for the Calculator window
cEl.FindFirstBy("AutomationId=num9Button").Click()  ; 9 
cEl.FindFirstBy("AutomationId=plusButton").Click()  ; + 

cEl.FindFirstBy("AutomationId=num5Button").Click()  ; 5
cEl.FindFirstBy("AutomationId=equalButton").Click()  ; =

ExitApp

위 코드를 실행해보시면 아래 그림과 같이 계산기에서 9 + 5 = 14 라는 결과를 확인할 수 있습니다.

위 유튜브 동영상에서도 소개를 하지만 DumpAll() 함수를 사용하면 접근 가능한 sub-elements 을 모두 확인 할 수 있습니다.

저는 이번 UIAutomation 라이브러리를 통해 그 동안 제가 정말 답답해 했던 한 가지 부분이 해결된 것 같아서 너무 기분이 좋네요.

반응형

댓글