4

Windows 7 64ビットマシンでpython 2.7(32ビット)を使用しています。私はwin32 APIを使用していくつかのWindowsタスクを自動化しています。また、Pythonとwin32 APIは初めてです。同様の質問を見ましたが、Python ではなく、コードを理解するのに苦労しました。悲しいことに、私はここで初めてなので、担当者が 50 歳未満であるため、コメントしたり質問したりすることはできません。そのため、独自の質問を作成する必要がありました。

最近、私はシステム トレイ (通知領域)を使用しています。トレイ内の任意のアイコンを名前で (左または右に) クリックするところまで来ました。

ここで助けが必要なのは、右クリック後にコンテキスト メニュー項目にアクセスすることです。

そのため、右クリックを実行すると、ポップアップ メニューが表示されます。そのアイテムまたはコンテンツをクリックできるようにハンドルを取得しようとすると、無効なメニュー ハンドルであるというエラーが表示されます。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

どんな助けでも大歓迎ですありがとう!

4

1 に答える 1

3

まず、FindWindow呼び出しでポップアップ メニュー ウィンドウが表示されるとは限りません。コードの実行速度が速すぎる場合は、ウィンドウがまだ作成されていない可能性があります。無限ループではないスリープで遊ぶ必要があります。

次に、FindWindowHMENU ではなく HWND を返します。MN_GETHMENU Windows メッセージを使用してみてください(HWND に送信し、結果として HMENU を受け取ります)。

于 2014-02-13T08:59:47.713 に答える