因为我终于得到了这个问题的答案:Can you send a signal to windows explorer to make it refresh the systray icons,要求摆脱死亡系统图标,我想问相反。
有没有办法“轻推”一个应用程序,如果它丢失了,就会重新显示它的systray图标?
自从我安装Avira AV以来,它就发生在我的Apache Monitor上 好的,被授予,它只能是副作用,但让运行的应用程序被杀死然后重新启动它是非常烦人的,因为它没有正确显示系统托盘图标。
提前致谢,
格斯
答案 0 :(得分:10)
恢复任务栏图标是由应用程序本身(而不是资源管理器)实现的。有一个窗口消息称为“TaskbarCreated”(其值可以通过RegisterWindowMessage("TaskbarCreated")
获得)应用程序需要响应,以便在必要时恢复任务栏图标。
例如,应用程序可以执行此操作:
const int uTaskbarCreatedMsg = RegisterWindowMessage("TaskbarCreated");
然后在其WndProc函数中:
LRESULT CALLBACK WndProc(HWND w, UINT msg, WPARAM wparam, LPARAM lparam)
{
// ... handle other messages
if (msg == uTaskbarCreatedMsg) {
NOTIFYICONDATA nid;
// fill in details to create icon
Shell_NotifyIcon(NIM_ADD, &nid);
return 0;
}
// ... default message handling
}
因此,为了强制应用程序恢复其任务栏图标,您需要将相同的TaskbarCreated
消息发送到应用程序中的相应窗口。获取HWND
窗口的一种方法是使用FindMessage
(由于Apache Monitor是开源的,因此很容易找到要查找的窗口)。
答案 1 :(得分:4)
我编写了一个项目,将TaskbarCreated消息发送到系统中的所有顶级窗口。如果他们已经注册了一个托盘图标,那么应该让他们在资源管理器崩溃后恢复图标。
我在MIT许可下发布了the source,并在自述文件中提供了the compiled console application(与Lazarus)的链接。
当然可以进行一些改进,例如,如果已知图标已经在托盘中,则不发送消息,但是现在这个应用程序导致我知道在Explorer崩溃时丢失的图标重新出现
答案 2 :(得分:-3)
这对我有用(Windows 7 - 64位)
您现在应该在系统托盘中看到图标