Explorer.exe崩溃后自动重启任务栏托盘区图标丢失

相信很多Windows用户都碰到过这种情况:运行某个程序时出现意外错误,导致外壳程序Explorer.exe崩溃而发生重启(即Explorer.exe被关闭后重新运行),任务栏也在消失后重新生成,但应用程序在通知栏添加的图标消失了,虽然这些程序仍在运行,但再也无法通过通知栏图标与用户交互。为避免这种情况出现,Windows提供了相应的机制。

在安装了Internet Explorer 4.0及以上版本的Windows操作系统中,当任务栏建立后,外壳会向所有顶层的应用程序发出通知消息,该消息是外壳以字符串“TaskbarCreated”为参数向系统注册获得的,应用程序窗口接收到该消息后就应该重新添加的通知栏图标。


解决方法:

UINT g_uTaskbarCreated = RegisterWindowMessage(TEXT("TaskbarCreated"));  //注册这样的一个消息


下面在消息处理函数中添中一个这样的判断,如果是一个重建任务栏的消息,哪么将我们的应用程序托盘重新添加上去。

if(message == g_uTaskbarCreated)
{
PAPS_GLOBAL This = Global;
Shell_NotifyIcon(NIM_ADD, &This->NotifyIconData);
}

微软官网链接:http://msdn.microsoft.com/en-us/library/windows/desktop/cc144179(v=vs.85).aspx

你可能感兴趣的:(Windows编程)