[Python/자동화] pywinauto print_control_identifiers() 변수로 저장하기

안녕하세요, 지꿀입니다🐽 요즘 파이썬을 이용한 자동화(RPA, 매크로 제작)에 관심이 생겨 pywinauto 패키지와 pyautogui 패키지를 열심히 공부하고 있어요.
그 중 pywinauto 패키지를 사용하는 분들이라면 거의 모두가 사용하시는 print_control_identifiers() 함수에 대해 포스팅을 하게 되었습니다.


pywinauto print_control_identifiers()

pywinauto 패키지를 이용하여 앱의 dialog를 획득한 다음, 해당 앱의 버튼, 메뉴, 콤보박스 등의 구조를 보기 위해 print_control_identifiers() 함수를 많이 이용합니다. 이 함수는 GUI 애플리케이션에서 특정 윈도우 또는 컨트롤의 식별자(identifier) 정보를 출력해줍니다. 이 함수를 사용하면 해당 윈도우나 컨트롤의 속성 및 계층 구조를 쉽게 확인할 수 있어요. 즉 해당 프로그램이 버튼으로 구성되어 있는지, 콤보 박스로 구성되어 있는지, MenuItem들로 구성되어 있는지를 Tree 형식으로 볼 수 있어요.

그런데 이 함수가 조금 불편한 것이 return 값이 없고 단순히 화면에 계층 구조를 print만 해주는데요.. 변수로 저장할 수 없을까 고민하다가 직접적인 할당은 아니지만 조금 우회하여? 변수로 저장하는 방법을 찾아 소개하려고 합니다.


출력 결과 txt 파일로 저장하기

아래 코드를 통해 print_control_identifiers()의 내용을 파일로 쉽게 저장할 수 있어요.

from pywinauto.application import Application

# 애플리케이션 실행 또는 이미 실행 중인 경우 연결
app = Application().start("경로\\to\\your\\application.exe")

# 대상 윈도우 식별자 저장
app.top_window().print_control_identifiers(filename='./control_identifiers.txt')

예제) 계산기 컨트롤 식별자 저장하기

계산기 앱의 컨트롤 식별자를 저장하는 코드를 작성해볼게요.

계산기
from pywinauto import application

app = application.Application(backend='uia')

# 프로세스 id를 이용하여 connect
app.connect(process=6096)

dlg = app['계산기']

# txt 파일 저장하기
dlg.print_control_identifiers(filename='./control_identifiers.txt')

저는 프로세스 id를 이용하여 앱을 연결시켜 주었어요. 위의 코드를 실행하면 txt 파일이 해당 경로에 생성됩니다.

해당 txt파일 아래에 첨부해 둘게요 😊

Leave a Comment