既然我终于得到了这个问题的答案:Can you send a signal to windows explorer to make it refresh the systray icons,它问的是如何删除失效的systray图标,我想问的是相反的问题。
有没有办法“轻推”一个应用程序,在它丢失的情况下重新显示它的systray图标?
自从我安装了Avira AV后,它就发生在我的Apache Monitor上。
好吧,诚然,这可能只是一个副作用,但让正在运行的应用程序终止并重新启动它,只是因为它没有正确显示systray图标,这是相当恼人的。
提前谢谢你,
古斯
发布于 2013-03-22 02:41:56
我已经编写了一个向系统中所有顶级窗口发送TaskbarCreated消息的项目。如果他们注册了一个托盘图标,这应该会导致他们在资源管理器崩溃后恢复图标。
我在麻省理工学院的许可下发布了the source,并在自述文件中提供了the compiled console application的链接(与Lazarus一起)。
当然,还有一些改进可以做,比如如果知道图标已经在任务栏中,就不发送消息,但现在这款应用程序会让我知道在Explorer崩溃时丢失的图标重新出现。
发布于 2009-07-11 23:17:48
恢复任务栏图标是由应用程序本身(而不是资源管理器)实现的。有一个名为"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是开源的,所以很容易发现要查找哪个窗口)。
发布于 2012-03-03 12:54:57
这适用于我(Windows 7- 64位)
启动apachemonitor
您现在应该在系统托盘中看到该图标。
https://stackoverflow.com/questions/1114887
复制相似问题