2014-02-12 8 views
4

Windows 7 64 비트 컴퓨터에서 파이썬 2.7 (32 비트)을 사용하고 있습니다. 일부 Windows 작업을 자동화하기 위해 win32 Api을 사용하고 있습니다. 또한 파이썬과 win32 API에 익숙하지 않습니다. 파이썬에서와 비슷한 질문을 보았지만 코드를 이해하는 데 어려움을 겪었습니다. 슬프게도 여기에 새로 왔기 때문에 내 담당자가 50 세 이하이므로 질문을하고 코멘트를 할 수 없으므로 직접 질문해야했습니다.팝업 메뉴에서 항목 선택 win32 api Python

최근에는 시스템 트레이 (알림 영역) 으로 작업했습니다. 트레이의 아이콘 중 하나를 클릭하여 (왼쪽 또는 오른쪽) 이름을 알 수 있습니다.

이제 도움이 필요한 것은 마우스 오른쪽 버튼을 클릭 한 후 문맥 메뉴 항목 에 액세스하는 것입니다.

그래서 오른쪽 클릭을하면 팝업 메뉴이 나타납니다. 그 항목이나 내용을 클릭 할 수 있도록 핸들을 얻으려고 시도하고 잘못된 메뉴 핸들이라는 오류가 발생합니다. win32gui.GetSubMenu가 실패하면 win32gui.GetMenu가 실패합니다. win32gui.GetMenuItemCount가 -1을 반환하는 것처럼 간단합니다.이 메뉴에 액세스하는 방법에 대한 도움이 필요합니다. 탐색 한 후 항목을 클릭하십시오.

코드의 조각 나는 노력했습니다 :

# retrieves a handle to the notification area toolbar 
tb = getNotificationAreaToolbar() 

# clicks on an icon in the system tray say I'm right clicking the sound icon 
#(in my case AMD HDMI Output) 
clickSystemTrayIcon('right', 'AMD HDMI Output', tb) 

#now the context popup menu comes up. 
# According to MSDN the class name for such menu is #32768 
hPopupmenu = win32gui.FindWindow("#32768", "") 

# An example of a try to access the menu items 
# Getting the count: this is returning -1 saying the handle is not a menu handle 
count = win32gui.GetMenuItemCount(hPopupMenu) 

#send a command, doesn't do anything 
win32gui.PostMessage(tb, win32con.WM_COMMAND, win32gui.GetMenuItemId(hPopupmenu,1) , 0) 

# the thing that makes me sure that I'm getting the right window of the popup is 
# win32gui.GetWindowRect(hPopmenu) it's returning the right position of the menu 

어떤 도움을 크게 감사는 감사합니다!

답변

3

먼저, FindWindow 호출에 팝업 메뉴 창이 표시된다고 추측 할 수 없습니다. 코드가 너무 빨리 실행되면 창이 아직 만들어지지 않은 것일 수 있습니다. 무한 루프가 아닌 Sleep으로 게임을해야합니다.

두 번째로 FindWindow은 HMENU가 아닌 HWND를 반환합니다. MN_GETHMENU Windows 메시지 (HWND로 보내기, 결과로 HMENU 수신)를 사용해보십시오.

+0

감사합니다. manuell 나는 항상 여기에서 나를 도와주는 사실에 감사드립니다. FindWindow를 사용하여 MN_GETHMENU를 호출하면 솔루션이 작동합니다. 원하는 팝업 메뉴를 처리 할 수 ​​있습니다. 잘 작동하는 창 rect에 관해서는, 내 실제 코드에서 사이에 잠을 호출합니다. 다시 나는이 물건에 대해 아직 익숙하지 않고 가끔은 충분한 문서를 찾지 못한다. 그러나 나는 많은 것을 확실히 배우고있다! 또한 답변을 평가할 수 있고 여기에 더 많은 것들을 할 수있게되어서 기쁩니다. 감사합니다. :) – TheCodingGent

+0

@yasman 감사합니다. 환영합니다. – manuell