3

有人可以告诉我如何使用我的应用程序隐藏/显示其他应用程序/进程的托盘图标吗,我想隐藏“连接到互联网”图标(发送/接收/两者时变成蓝色的两台计算机)从我的应用程序
编辑:我可以使用从http://scalabium.com/faq/dct0147.htm获取的这段代码来隐藏系统时钟

ShowWindow(FindWindowEx(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil), 0, 'TrayClockWClass', nil), SW_HIDE);

我想我也可以使用此代码来隐藏“互连连接图标”(顺便说一下,该图标叫什么?)也可以通过替换 TrayClockWClass 但使用哪个类?我曾尝试使用名为windowse的工具查找类名,但没有运气
edit2:我可以通过左键单击“托盘窗口”然后选择属性并在属性窗口上单击“自定义”按钮然后从“隐藏”更改图标属性来隐藏窗口中的这些图标当不活动时'到'总是隐藏'我可以在delphi中做到这一点,或者更好的是我可以随时隐藏/显示(完全)那个图标(使用delphi)

4

3 回答 3

4

API 不会公开对其他应用程序图标的访问权限。唯一的选择是对系统托盘本身进行子类化,以拦截 Shell_NotifyIcon() 发送给它的窗口消息,以便您可以跟踪哪些 HWND 正在注册哪些图标 ID。

于 2010-08-12T08:22:07.887 回答
3

您引用的时钟示例有效,因为虽然时钟图标与通知托盘位于同一区域,但它实际上不是同一个窗口,而是一个单独的窗口本身。您不能使用相同的方法隐藏单个图标,因为它们都被视为一个整体。

不过,您可以隐藏整个通知托盘:

ShowWindow(FindWindowEx(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil), 0, 'SysPager', nil), SW_HIDE);
于 2010-11-09T21:43:36.857 回答
0

如果您负责正在运行的计算机,则只需右键单击该图标并手动禁用它。大概这会在注册表中写入一些设置(使用 procmon 查找),因此您可以通过 Active Directory 将其自动化。

如果您不负责,这意味着它不是您的,只是一些随机的计算机,并且您的应用程序自愿决定继续并隐藏它不喜欢的图标,那么不,没有 API 可以做到这一点,甚至会搞砸您试。由用户决定何时隐藏图标,而不是您的超酷程序。

于 2010-08-12T12:30:29.850 回答