soma0sd

코딩 & 과학 & 교육

Python: 윈도우와 핸들 목록 얻기

반응형

pywin32의 모듈인 win32gui를 이용하여 현재 열려있는 창의 이름과 핸들의 리스트를 얻도록 하겠습니다. 윈도우의 핸들은 비활성 창의 정보를 얻거나 명령을 내릴 때 사용합니다.

스크립트

이 스크립트는 python 3.6, 3.7에서 시험했습니다.

from win32 import win32gui

def getWindowList(self):
    def callback(hwnd, hwnd_list: list):
        title = win32gui.GetWindowText(hwnd)
        if win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd) and title:
            hwnd_list.append((title, hwnd))
        return True
    output = []
    win32gui.EnumWindows(callback, output)
    return output

if __name__ == "__main__":
    print("\n".join("{: 9d} {}".format(h, t) for t, h in getWindowListt()))

스크립트를 실행하면 현재 열려있는 윈도우의 핸들과 이름 목록을 나열합니다.

내용 뜯어보기

win32gui.EnumWindows(callback, output)

윈도우를 나열하는 win32gui.EnumWindows(callback, output)은 내장함수인 map()과 비슷한 방식으로 사용할 수 있습니다. EnumWindows는 윈도우의 수 만큼 callback을 실행하며 이 때 두 개의 변수를 담습니다. callback의 첫 번째 변수(예제에서는 hwnd)에는 윈도우의 핸들이 들어가고, 두 번째 변수에는 주로 핸들의 목록을 담는데 사용하는 사용자 변수(예제에서는 output)가 들어갑니다.

win32gui.GetWindowText(hwnd)

핸들을 입력받아 윈도우의 이름을 가져옵니다. 개발자가 지정한 이름이 아니라 보이는 이름 그대로를 가져오기 때문에 이름이 공백인 창도 많습니다. callback() 함수의 if... and title:에 있는 and title 조건을 제거하면 이름없는 윈도우의 핸들도 볼 수 있습니다.

반응형
태그:

댓글

End of content

No more pages to load