因为我终于得到这个问题的答案: 你可将信号发送到Windows资源管理器,使其刷新系统托盘图标 ,询问有关摆脱死系统托盘图标,我想问的是相反的。
有没有一种方法来“微调”的应用程序,如果它已经丧失重新显示它的系统托盘图标?
它发生在我的Apache监视器自从我安装的Avira AV。
好了,理所当然的,它只能是一种副作用,但它是很烦人有正在运行的应用程序杀死了,然后重新启动它,只是因为它无法正确显示系统托盘图标。
提前致谢,
格斯
因为我终于得到这个问题的答案: 你可将信号发送到Windows资源管理器,使其刷新系统托盘图标 ,询问有关摆脱死系统托盘图标,我想问的是相反的。
有没有一种方法来“微调”的应用程序,如果它已经丧失重新显示它的系统托盘图标?
它发生在我的Apache监视器自从我安装的Avira AV。
好了,理所当然的,它只能是一种副作用,但它是很烦人有正在运行的应用程序杀死了,然后重新启动它,只是因为它无法正确显示系统托盘图标。
提前致谢,
格斯
我已经写了发送TaskbarCreated消息系统中所有顶层窗口的项目。 如果他们已经注册了一个托盘图标,这应该使他们恢复图标资源管理器崩溃之后。
我已经发布源在MIT许可下,并提供了一个链接, 编译控制台应用程序中的自述文件(与拉撒路)。
当然,还有可能进行,就像如果图标被称为是在盘已经不发送的消息数的改进,但现在这个应用会,我知道去的资源管理器崩溃重现丢失的图标。
恢复任务栏图标的东西是由应用程序本身(而不是资源管理器)来实现。 有所谓的“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的监控是开源的,可以很容易地发现找哪个窗口)。
这个工作对我(的Windows 7 - 64位)
您现在应该看到在系统托盘的图标