You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pywinauto如何右键点击系统托盘图标选择菜单及子菜单项

问题原因

sysapp.menu_select('About')执行失败核心原因是:托盘图标右键弹出的上下文菜单由系统explorer.exe进程托管,并不属于TrayStatus.exe自身的顶级窗口菜单,直接对目标应用进程调用菜单选择方法自然找不到对应菜单项。另外原代码还存在一处笔误:target_app.target_app.print_control_identifiers()多写了一层target_app属性,运行时会直接触发属性错误。

修复后完整实现代码
from pywinauto import Application
import time

# 打开托盘隐藏图标展开面板
app = Application(backend="uia").connect(path="explorer.exe")
systemTray = app.window(class_name="Shell_TrayWnd")
systemTray.child_window(title="Notification Chevron").click_input(button="left")
time.sleep(0.25)

# 连接托盘溢出窗口
list_box = Application(backend="uia").connect(class_name="NotifyIconOverflowWindow")
list_box_win = list_box.window(class_name="NotifyIconOverflowWindow")
list_box_win.wait('visible', timeout=30, retry_interval=3)

# 定位目标托盘图标
target_app = list_box_win.child_window(title="TrayStatus Pro Trial 4.6\r\nCaps Lock: Off")
target_app.wait('visible', timeout=30, retry_interval=3)
# 右键点击图标
target_app.click_input(button="right")
time.sleep(0.3) # 等待右键菜单渲染完成

# 直接定位系统托管的右键菜单中的About项并点击
about_menu = app.window(class_name="#32768") # 系统标准上下文菜单的固定类名
about_menu.wait('visible', timeout=5)
about_menu.child_window(title="About", control_type="MenuItem").click_input()
关键说明
  • Win10及以上版本的托盘控件、系统上下文菜单优先使用uia后端操作,win32后端对这类控件识别兼容性极差
  • 系统所有标准右键弹出菜单的窗口类名固定为#32768,不需要额外遍历控件树即可快速定位
  • 点击托盘图标、展开菜单的步骤后必须加短等待,给系统UI留出渲染时间,否则会随机出现找不到控件的问题
  • 如果当前安装的TrayStatus版本About菜单标题带后缀(比如About TrayStatus),把定位时的title参数改成对应完整文本即可,可以在右键后临时加about_menu.print_control_identifiers()打印所有菜单项确认准确标题。

内容的提问来源于stack exchange,提问作者JDB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:36:15