【发布时间】:2011-03-02 11:03:09
【问题描述】:
如何找到正在显示给定任务栏系统托盘图标的 Windows 进程?
【问题讨论】:
标签: windows debugging process taskbar
如何找到正在显示给定任务栏系统托盘图标的 Windows 进程?
【问题讨论】:
标签: windows debugging process taskbar
我刚刚意识到,在 Windows 7 中,“选择在任务栏上显示哪些图标和通知”菜单在这里有点帮助。通过右键单击任务栏找到它,转到“属性”,然后单击“通知区域”框架中的“自定义...”按钮。
该窗口中的每一行代表 Windows 资源管理器看到的一个任务栏图标。在左边的两个rwo中,我相信上面的一个是任务管理器中显示的进程描述,下面的一个是显示任务栏图标的窗口的窗口标题。
这将帮助我找到我原来的问题! VisualSVN 弹出一个“注册我!”系统托盘中的 nag 窗口,尽管没有明显的 VisualSVN 进程在运行。最后我注意到当我关闭 Visual Studio 时这个 nag 窗口消失了,所以很明显 Visual Studio 中加载的 VisualSVN 加载项 DLL 正在创建 nag 窗口。
【讨论】:
Shell_NotifyIcon 通过发送一个特殊的WM_COPYDATA message to the taskbar 工作,如果您注入资源管理器并将任务栏子类化,您可以捕获此消息,然后您可以通过在 COPYDATAstruct.NOTIFYICONDATA.hwnd 上调用 GetWindowThreadProcessId 来获取进程 ID。
...当然,这是一种 hack,并且依赖于可能随时更改的无证信息!
【讨论】:
我不相信这是可能的。当然 Spy++ 报告通知区域是一个名为“用户提升通知区域”的单个窗口。这个窗口最终是桌面窗口的父窗口,并且与创建通知图标的进程没有明显的关联。
好吧,我所说的可能是指可能,而无需像安德斯建议的那样诉诸黑客手段,这无疑是可行的,但不是我想象的 OP 正在寻找的!
【讨论】: