我想知道是否有可能知道外部应用程序是否有一个显示在任务栏上的窗口。我有一个程序有时会显示错误消息并出现在任务栏上。如果我“关闭”该消息,它将变得不可见,但据我所见,它仍然存在。因此,我知道该窗口是否可见并因此“可点击”的唯一方法是检查它是否显示在任务栏上。
我怎样才能做到这一点?
谢谢
首先使用 spy++(随 Visual Studio 提供)找出类名、窗口名和窗口层次结构。提示:当屏幕上出现错误消息时,运行 spy++,按 Alt+F3,然后按 Alt+D,然后将查找工具放到错误消息窗口中,然后按 OK。
如果窗口是顶级的(即其父级是桌面),则使用FindWindow API。
如果窗口不是顶级窗口(即其父窗口是其他窗口),则首先使用 FindWindow 查找主窗口,然后使用FindWindowEx(可能递归)搜索该错误消息窗口。
用于管理任务栏的文档化 COM 接口是 ITaskbarList,但它只允许您添加/删除按钮,您无法获取现有按钮的列表。
所以,你有三个选择:
A)进入无证地带,找到任务栏及其子选项卡控件或工具栏(从 2000 更改为 XP)并查看其无证的每项数据(IIRC 有一个开源更改任务栏按钮订单应用程序有此信息)
B)检查您关心的窗口的样式(WS_VISIBLE 和(没有所有者或 WS_EX_APPWINDOW)而不是 WS_EX_TOOLWINDOW)或类似的东西
C)挂钩/子类损坏的应用程序