2014-01-23 3 views
3

Windows 알림 트레이 아이콘을 마우스 오른쪽 단추로 클릭하고 결과 컨텍스트 메뉴에서 항목 중 하나를 선택 (왼쪽 클릭)해야합니다.Windows 트레이 아이콘을 마우스 오른쪽 버튼으로 클릭하고 Python의 컨텍스트 메뉴에서 항목을 클릭하려면 어떻게합니까?

나는 pywinauto을 사용했는데, 한 How To's 페이지의 코드에서이 코드를 실행하는 동안 : pywinauto 가져 오기 작업 표시 줄에서 pywinauto.application 가져 오기 응용 프로그램 에서 를 나는 다음과 같은 오류를 얻고있다

# connect to outlook 
outlook = Application().connect_(process=4436) 

# click on Outlook's icon 
taskbar.ClickSystemTrayIcon(12) 

# Select an item in the popup menu 
outlook.PopupMenu.MenuClick("Cancel Server Request") 

:

Traceback (most recent call last): 
    File "C:\dev\consumertms\temp.py", line 25, in <module> 
    taskbar.ClickSystemTrayIcon(12) 
    File "C:\Python27\lib\site-packages\pywinauto\taskbar.py", line 52, in ClickSystemTrayIcon 
    button = _get_visible_button_index(button) 
    File "C:\Python27\lib\site-packages\pywinauto\taskbar.py", line 42, in _get_visible_button_index 
    if not SystemTrayIcons.GetButton(i).fsState & \ 
    File "C:\Python27\lib\site-packages\pywinauto\controls\common_controls.py", line 1878, in GetButton 
    button.idCommand) 
RuntimeError: GetButtonInfo failed for button with command id 2 

현재 Windows 8을 실행하고 있지만 Windows XP 이상에서는 실행해야합니다.

검색 한 결과이 문제를 해결할 수 없습니다.

내 질문 :이 오류의 해결 방법이 있습니까? 그렇지 않다면이 프로세스를 자동화하는 데 사용할 수있는 다른 파이썬 모듈이 있습니까? 일부 코드 스 니펫은 대단히 감사하겠습니다.

감사합니다.

+0

당신이 [AutoIt을 (http://www.autoitscript.com/site/autoit/) – User

+0

내가 필요로 사용할 수 있습니다 파이썬 또는 C++ (이것을 ctypes를 통해 사용합니다)에서 자동화하려면 – heavenslife

+0

MSAA 기술 자동화를위한 파이썬의 모듈이 있습니다 - https://github.com/phuslu/pyMSAA 오른쪽 클릭을 할 수 없습니다 왼쪽 클릭) 트레이 아이콘에서 아이콘을 가져올 수 있지만이 좌표를 사용하여 아이콘의 좌표를 가져온 다음 pywinauto의 ClickInput 메소드를 클릭 할 수 있습니다. 불행히도 저는 지금 예제가 없습니다. – SWAPYAutomation

답변

2

상황에 맞는 메뉴 또는 드롭 다운 메뉴는 자체적으로 창 컨텍스트가 될 수 있습니다. findwindows.find_windows()으로 찾으셔야합니다.

고유하지 않은 GUI에서 드롭 다운 메뉴 항목에 액세스해야 할 때이 문제가 발생했습니다. 해당 창의 클래스 이름을 얻는 가장 쉬운 방법은 SWAPY를 사용하는 것인데, SWAPY는 모든 창 개체를 나열하고 편리한 pywinauto 코드 https://code.google.com/p/swapy/을 만듭니다.

일반적인 접근 방식은 다음과 같이 될 것이다 : 당신은 UI의 일을 자동화 할 경우

outlook = Application().connect_(process=4436) 
taskbar.ClickSystemTrayIcon(12) 

# Use SWAPY to find the class name of the popup menu 
w_handle = findwindows.find_windows(title=u'', class_name='name-found-in-SWAPY')[0] 
popup = app.window_(handle=w_handle) 
popup.Click(coords=(x,y))