我在Windows 7 64位機器上使用python 2.7(32位)。我正在使用win32 Api來自動化一些Windows任務,我也是python和win32 api的新手。我看到類似的問題,但沒有在python中,我無法理解代碼,可悲的是我在這裏是新手,所以我不能評論和提問,因爲我的代表不到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
任何的幫助感激謝謝!
謝謝manuell我很欣賞你總是幫我在這裏。如果我使用FindWindow,然後調用MN_GETHMENU,那麼你的解決方案就可以工作,我得到我想要的彈出式菜單的句柄。至於窗口rect工作正常,在我的實際代碼中,我確實在兩者之間調用睡眠。再次,我對這些東西仍然很陌生,有時候我沒有找到足夠的文檔,但我確實學到了很多東西!也很高興我的代表正在上升,所以我可以評價答案,並在這裏做更多的東西,再次感謝! :) – TheCodingGent
@yasman感謝你,你不客氣。 – manuell