通过第 3 方应用程序修改 NotifyIcon 的行为
我一直很好奇是否可以通过 C# 应用程序显示、隐藏或更改另一个应用程序创建的 NotifyIcon。
有人可以发布一个关于如何执行此操作的示例吗? :)
I've always been curious to see if I can show, hide or change a NotifyIcon created by another application via a C# application.
Could someone please post an example on how to do this? :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
要修改系统托盘中的图标,您可以使用 Shell_NotifyIcon Win32 API ( P/Invoke 声明)。 这些图标与窗口句柄和 ID 相关联。 这意味着要修改或隐藏另一个程序的图标,您需要知道该应用程序用于注册它的窗口和 ID。 例如,您可以通过枚举该进程的所有窗口并使用每个句柄和每个 0 到 5000 万之间的数字进行调用来暴力破解它,但成功的机会非常渺茫。
To modify icons in the systray, you can use Shell_NotifyIcon Win32 API (P/Invoke declaration). The icons are associated with a window handle and an id. That means that to modify or hide another program's icon, you need to know the window and the id used by that application to register it. You might be able to brute force it by enumerating all windows for that process and making calls with each handle and each number between 0 and 5000 thousands for example, but your chances of success are very slim.
您可以挂钩 SystemTray 窗口本身来拦截所有 Shell_NotifyIcon() 请求。 然后您将知道为每个图标注册的确切 HWND 和 ID。 详细信息可以通过任何搜索引擎找到。
You can hook the SystemTray window itself to intercept all Shell_NotifyIcon() requests. Then you will know the exact HWNDs and IDs that are registered for each icon. Details can be found via any search engine.
我不知道任何事情,除非其他应用程序公开了一些公共方法,或者您尝试使用反射,但我什至不确定您是否可以在正在运行的进程上执行此操作。
I am not aware of anything, unless that other application exposes some public method, or you try to use reflection, but I'm not even sure that you can do that on a running process.