파 이 썬 을 사용 하여 windows 데스크 톱 을 자동 으로 제어 하 는 방법

머리말
PC 를 사용 할 때 PC 와 상호작용 하 는 주요 경 로 는 화면 표시,소리 듣 기,마우스 클릭 과 키보드 두 드 리 기 등 이다.자동화 사무 추세 하에 서 번 거 로 운 일 은 절 차 를 자동 으로 완성 할 수 있다.예 를 들 어 자동화 테스트,자동 주문 거래 등 이다.많은 소프트웨어 들 이 GUI 방식 으로 조작 할 수 있 는 것 외 에 도 CLI 인터페이스 로 조작 할 수 있 지만,일부 소프트웨어 가 CLI 인 터 페 이 스 를 제공 하지 않 을 때 우 리 는 어떻게 해 야 합 니까?데스크 톱 의 창 을 프로그램 으로 제어 하고 마 우 스 를 모 의 클릭 하거나 키 보드 를 누 르 는 동작 으로 자신 을 풀 수도 있다.
pywin 32 는 Python 라 이브 러 리 로 Python 에 Windows API 를 방문 하 는 확장 을 제공 합 니 다.완 비 된 windows 상수,인터페이스,스 레 드,COM 메커니즘 등 을 제공 합 니 다.설치 후 python win 의 IDE 를 가 져 옵 니 다.다음은 파 이 썬 을 통 해 windows 데스크 톱 소프트웨어 를 조작 하 는 방법 을 소개 한다.
1.소프트웨어 나 파일 열기
예 를 들 어 구 글 브 라 우 저 를 열거 나 워드 파일 을 열 면 다음 과 같다.

win32api.ShellExecute(1, 'open',
 r'C:Program Files (x86)GoogleChromeApplicationchrome.exe',
 '', '', 1)
win32api.ShellExecute(1, 'open',
 r'C:UsersJayDesktopEnvironment Guider.docx',
 '', '', 1)
win32api.ShellExecute()의 매개 변 수 는 주로 다음 과 같 습 니 다.
  • HWND:부모 창 핸들 지정
  • 작업:지정 동작,예 를 들 어"edit","explore","open","find","print","NULL"
  • FileName:열 파일 이나 프로그램 을 지정 합 니 다
  • Parameters:프로그램 을 여 는 데 필요 한 매개 변 수 를 지정 합 니 다
  • 디렉토리:결 성 디 렉 터 리
  • ShowCmd:옵션 을 열 면 선택 할 수 있 습 니 다.
  • SW_HIDE = 0; {창 숨 기기,활성 상태 명령 창}
  • SW_SHOWNORMAL = 1; {최근 크기 와 위치 로 창 을 표시 하고 활성 상태 로 들 어가 게 합 니 다}
  • SW_NORMAL = 1; {현재 크기 와 위치 로 창 을 표시 합 니 다.활성 창 을 바 꾸 지 않 습 니 다}
  • SW_SHOWMINIMIZED = 2; {창 을 최소 화하 고 활성화 합 니 다}
  • SW_SHOWMAXIMIZED = 3; {창 을 최대 화하 고 활성화 합 니 다}
  • SW_MAXIMIZE = 3; {동 SWSHOWMAXIMIZED}
  • SW_SHOWNOACTIVATE = 4; {최근 크기 와 위치 로 창 을 표시 합 니 다.활성 창 을 바 꾸 지 않 습 니 다}
  • SW_SHOW = 5; {현재 크기 와 위치 로 창 을 표시 하여 활성 상태 로 들 어가 게 합 니 다}
  • SW_MINIMIZE = 6; {창 최소 화,활성화 하지 않 음}
  • SW_SHOWMINNOACTIVE = 7; {동 SWMINIMIZE}
  • SW_SHOWNA = 8; {현재 크기 와 위치 로 창 을 표시 합 니 다.활성 창 을 바 꾸 지 않 습 니 다}
  • SW_RESTORE = 9; {동 SWSHOWNORMAL}
  • SW_SHOWDEFAULT = 10; {동 SWSHOWNORMAL}
  • SW_MAX = 10; {동 SWSHOWNORMAL}
  • 실행 에 성공 하면 프로그램 핸들 을 되 돌려 줍 니 다.값<=32 를 되 돌려 주면 실행 오류 가 발생 합 니 다.반환 가능 한 오류:
  • 0―{메모리 부족}
  • 2―{파일 이름 오류}
  • 3―{경로 명 오류}
  • 11―{EXE 파일 이 잘못 되 었 습 니 다}
  • 26―{공유 오류 발생}
  • 27―{파일 이름 이 불완전 하거나 무효}
  • 28―{시간 초과}
  • 29―{DDE 업무 실패}
  • 30―{다른 DDE 업 무 를 처리 하고 있 지만 이 DDE 업 무 를 완성 하지 못 합 니 다}
  • 31―{관련 이 없 는 응용 프로그램}
  • 2.창의 핸들 찾기
    win 32 프로 그래 밍 의 세계 에서 창 에서 텍스트 상자 까지 의 모든 컨트롤 은 창 이 고 모든 창 은 독립 된 핸들 이 있 습 니 다.임의의 창 을 조작 하려 면 이 창의 핸들 을 찾 아야 합 니 다.핸들 은 windows 에서 대상 을 표시 하 는 데 사용 되 는 32 비트 정수 입 니 다.예 를 들 어 Snipping Tool 과 New Text Document.txt 의 핸들 을 찾 습 니 다.다음 과 같 습 니 다.
    
    para_hld = win32gui.FindWindow(None, "Snipping Tool")# 1836416
    para_hld = win32gui.FindWindow(None, "New Text Document.txt - Notepad")# 591410
    win32gui.FindWindow()는 win32gui 모듈 에 속 합 니 다.맨 위 창(즉 데스크 톱)에서 조건 에 맞 는 창 을 검색 하고 이 창의 핸들 을 되 돌려 줍 니 다.이 함 수 는 주 창 만 찾 을 수 있 기 때문에 하위 창 을 검색 할 수 없고 대소 문자 도 구분 하지 않 으 며 찾 지 못 하면 0 으로 돌아 갑 니 다.
    win32gui.FindWindow()의 매개 변 수 는 주로(lpClassName=None,lpWindowName=None)을 포함한다.
  • lpClassName:문자,창의 클래스 이름,Spy+에서 찾 을 수 있 습 니 다
  • lpWindow Name:문자,창 이름,즉 제목 표시 줄 에서 볼 수 있 는 제목 입 니 다.

  • 3.핸들 의 클래스 이름과 제목 찾기
    예 를 들 어 Snipping Tool 과 New Text Document.txt 의 핸들 을 통 해 해당 하 는 클래스 이름과 제목 을 찾 습 니 다.다음 과 같 습 니 다.
    
    title = win32gui.GetWindowText(1836416)
    classname = win32gui.GetClassName(1836416)
    print "windows handler:{0}; title:{1}; classname:{2}".format(1836416, title, classname)
    인쇄 화면 은 다음 과 같 습 니 다:
    
    windows handler:1836416; title:Snipping Tool; classname:Microsoft-Windows-Tablet-SnipperToolbar
    title = win32gui.GetWindowText(591410)
    classname = win32gui.GetClassName(591410)
    print "windows handler:{0}; title:{1}; classname:{2}".format(591410, title, classname)
    인쇄 화면 은 다음 과 같 습 니 다:
    
    windows handler:591410; title:New Text Document.txt - Notepad; classname:Notepad
    4.win32gui.EnumWindows()를 호출 하여 모든 창 핸들 을 열거 합 니 다.
    마지막 최상 위 창 이 매 거 될 때 까지 매 거 진 과정 을 중단 합 니 다.다음 과 같다.
    
    hWndList = []
    win32gui.EnumWindows(lambda hWnd, param: param.append(hWnd), hWndList)
    print hWndList
    for hwnd in hWndList:
     title = win32gui.GetWindowText(hwnd)
     print title
    인쇄 화면 은 다음 과 같 습 니 다:
    
    [852802L, 65946L, 65928L, 65930L, 65900L, 65920L, 65924L, 65922L, 65944L, 65892L, 65886L, 6817870L, 65960L, 6031410L, …… 66052L, 65734L]
    ……
    New Text Document.txt - Notepad
    Snipping Tool
    DDE Server Window
    OfficePowerManagerWindow
    OfficePowerManagerWindow
    DDE Server Window
    GDI+ Window
    Global Internet Access
    ……
    5.win 32gui.SetForegroundWindow()함수 가 지정 한 창 을 맨 위 에 설정 하고 이 창 을 활성화 합 니 다.
    구조 함수:win32gui.SetWindowPos(HWN hwnd,HWND hwndlnsert After,int X,int Y,int cx,int cy,UNIT.Flags)
    win32gui.SetForegroundWindow(parahld)잘못된 질문:
    
    pywintypes.error: (0, ‘SetForegroundWindow', ‘No error message is available')
    사실 SetForegroundWindow()를 호출 하 는 데 는 많은 제한 이 있 습 니 다.홈 페이지설명 하 다.를 참고 하 세 요.

    따라서 SetForegroundWindow()를 호출 할 때 현재 실행 중인 조건 이 상기 요구 에 부합 되 는 지 확인 해 야 합 니 다.SetForegroundWindow()를 호출 하기 전에 키보드 이 벤트 를 미리 보 내 서 이 문 제 를 해결 해 야 합 니 다.
    예 는 다음 과 같다.
    
    win32api.keybd_event(13, 0, 0, 0) #
    win32gui.SetForegroundWindow(para_hld)
    6、win32api.keybd_이벤트()아 날로 그 키보드 입력
    구조 함 수 는 다음 과 같다.
    
    win32api.keybd_event (bVk, bScan, dwFlags, dwExtraInfo)
  • bVk:가상 키 코드(키보드 키 코드 대조 표 부록 참조);
  • bScan:하드웨어 스 캔 코드 는 보통 0 으로 설정 하면 됩 니 다.
  • dwFlags:함수 작업 의 표지 위치 입 니 다.값 이 KEYEventF 이면EXTENDEDKEY 는 이 키 를 누 르 면 0 으로 설정 할 수 있 습 니 다.값 이 KEYEVENTF 이면KEYUP 은 이 버튼 이 풀 립 니 다.
  • dwExtraInfo:키 와 관련 된 추가 32 비트 값 을 정의 하고 보통 0 으로 설정 하면 됩 니 다.
  • enter 키 를 누 른 후 들 어 올 리 는 규칙 은 다음 과 같 습 니 다.
    
    win32api.keybd_event(13,0,0,0) # enter
    win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0) #    
    7.마우스 입력 시 뮬 레이 션
    다음 과 같이 예 를 들 어 보 겠 습 니 다.
    
    #            
    print win32api.GetCursorPos()
    #          
    win32api.SetCursorPos((100, 100))
    #    
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 100, 100, 0, 0)
    time.sleep(2)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 100, 100, 0, 0)
    8.마우스 키보드 조작 은 PyUserInput 라 이브 러 리 도 사용 할 수 있 습 니 다.
    PyUserInput 은 python 의 크로스 플랫폼 을 사용 하여 마우스 와 키 보드 를 조작 하 는 모듈 로 사용 하기에 매우 편리 하 다.지원 하 는 플랫폼 과 의존 도 는 다음 과 같 습 니 다.
  • Linux - Xlib
  • Mac - Quartz, AppKit
  • Windows - pywin32, pyHook
  • 마우스 와 키보드 대상 을 예화 합 니 다.다음 과 같 습 니 다.
    
    from pymouse import PyMouse
    from pykeyboard import PyKeyboard
    m = PyMouse()
    k = PyKeyboard()
           ,    :
    m.click(190,70,1)#     xy    
    time.sleep(2)
    m.click(190, 200, 1)#     xy    
    time.sleep(2)
    k.tap_key(k.function_keys[5])#C     F5
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기