파이썬으로 윈도우의 타이틀에서 폭속으로 위치를 취득 【Windows】

왜 썼는지


파이썬으로 마우스 클릭하고 싶다! 앱이 실행 중입니까? 시작하면 어디에 있습니까?
피우 토식 이나 PyWinAuto , Windows App Driver
개인적으로 최적이라고 생각한 대답을 찾았으므로 행복을 공유하려고 했습니다.
모두 자동화하고 사보합시다.

기존 라이브러리의 미숙한 곳


이러한 단점으로부터, 기본적으로는 PyAutoGUI를 사용해, 할 수 없는 부분의 윈도우 조작계는 독자적인 구현으로서 보충하는 사용법으로 했습니다.
독자 구현한 부분은 그중 풀리크 하려고 생각하고 있습니다.

  • 피우 토식/Sikulix/Lackey
  • 윈도우 조작 시스템은 로드맵
  • 개념이 이미지 인식이므로 광범위한 검색에서 느리다
  • PyWinAuto

  • HowTo 에 게재되고 있는 어플리케이션의 기동 방법으로 기동할 수 없는 것이 있다.
  • 결국 파이썬에서 cmd 명령을 사용하는 날개에.
  • Windows App Driver

  • 판단이 느립니다.
  • Xpath에서 찾거나 어쨌든 느립니다. 대규모 ERP계 어플리케이션의 Xpath라든지, 매우 느린.


  • 줄거리


    파이썬에서 Windows API를 사용하여 창의 위치를 ​​반환하는 함수를 만들었습니다.
    창 제목을 기반으로 Top, Left, Bottom, Right 수치를 얻을 수 있습니다.
    수치는 화면의 좌상구석을 원점으로 한 양수입니다.

    코드


    갑자기 코드입니다.
    def GetWindowRectFromName(TargetWindowTitle:str)-> tuple:
        TargetWindowHandle = ctypes.windll.user32.FindWindowW(0, TargetWindowTitle)
        Rectangle = ctypes.wintypes.RECT()
        ctypes.windll.user32.GetWindowRect(TargetWindowHandle, ctypes.pointer(Rectangle))
        return (Rectangle.left, Rectangle.top, Rectangle.right, Rectangle.bottom)
    
    if __name__ == "__main__":
        print(GetWindowRectFromName('CALC'))
        pass
    

    동작


    인수는, 일본어라도 뭐든지 좋지만, 윈도우의 타이틀이 그 만마 들어갑니다.
    FindWindowW 을 사용하여 창 핸들을 가져옵니다.
    다음에, 이 핸들이 나타내는 윈도우로부터 GetWindowRectRECT 구조체 에 위치를 취득합니다.
    이 RECT의 내용으로 튜플을 재구축한 것을 반환값으로서 돌려줍니다.
    ※샘플 코드에서는 CALC 를 인수에 넣고 있습니다만, 일본어 환경에서는 電卓 라고 넣으면 OK입니다.

    환경


    파이썬 3.8.2 | packaged by conda-forge | (default, Apr 24 2020, 07:34:03) [MSC v.1916 64 bit (AMD64)] on win32 Windows 10 Pro 1909

    참고



    요약


    네이티브 함수를 감싸고 있기 때문에 폭속.
    Excelsior!

    좋은 웹페이지 즐겨찾기