3

Windows 通知トレイ アイコンを右クリックし、表示されるコンテキスト メニューの項目の 1 つを選択 (左クリック) する必要があります。

私はpywinautoを使用しようとしましたが、ハウツーページのコードからこのコードを実行しているときに: from pywinauto.application import Application from pywinauto import taskbar

# 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 以降で実行する必要があります。

私は周りを検索しましたが、これに対する回避策を見つけることができませんでした。

私の質問: このエラーの回避策はありますか? そうでない場合、このプロセスを自動化するために使用できる他の Python モジュールはありますか? いくつかのコード スニペットは非常に高く評価されます。

ありがとう

4

1 に答える 1

2

コンテキスト メニューまたはドロップダウン メニューは、それ自体でウィンドウ コンテキストにすることができます。findwindows.find_windows()で見つける必要があります。

非ネイティブ GUI でドロップダウン メニュー項目にアクセスする必要があるときに、この問題に遭遇しました。そのウィンドウのクラス名を取得する最も簡単な方法は、すべてのウィンドウ オブジェクトをリストし、便利な pywinauto コードhttps://code.google.com/p/swapy/を作成する SWAPY を使用することです。

典型的なアプローチは次のようになります。

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))
于 2015-03-08T04:14:11.063 に答える