Winapi 如何恢复一个;“失踪”;重新启动explorer.exe时的通知图标?

Winapi 如何恢复一个;“失踪”;重新启动explorer.exe时的通知图标?,winapi,taskbar,Winapi,Taskbar,我有一个Win32应用程序,它在启动时添加了一个任务栏图标 它工作得很好,除了浏览器崩溃然后重新启动,我的应用程序继续运行,但任务栏图标不见了 我怀疑我应该处理一些事件,但您所指的实际上是通知图标。正确使用这个术语很重要,这样我们才知道你的意思。无论如何,我想我的猜测是准确的 创建任务栏时,您需要收听向所有顶级窗口广播的窗口消息。这是这样的: 使用Microsoft Internet Explorer 4.0及更高版本,Shell会通知应用程序已创建任务栏。创建任务栏时,它会使用TaskbarC

我有一个Win32应用程序,它在启动时添加了一个任务栏图标

它工作得很好,除了浏览器崩溃然后重新启动,我的应用程序继续运行,但任务栏图标不见了


我怀疑我应该处理一些事件,但您所指的实际上是通知图标。正确使用这个术语很重要,这样我们才知道你的意思。无论如何,我想我的猜测是准确的

创建任务栏时,您需要收听向所有顶级窗口广播的窗口消息。这是这样的:

使用Microsoft Internet Explorer 4.0及更高版本,Shell会通知应用程序已创建任务栏。创建任务栏时,它会使用TaskbarCreated字符串注册一条消息,然后将此消息广播到所有顶级窗口。当您的任务栏应用程序收到此消息时,它应该假定它添加的任何任务栏图标已被删除,并再次添加它们。此功能通常仅适用于Shell启动时已经运行的服务。下面的示例显示了处理此情况的非常简化的方法

LRESULT CALLBACK WndProc(HWND hWnd, 
                         UINT uMessage, 
                         WPARAM wParam, 
                         LPARAM lParam)
{
    static UINT s_uTaskbarRestart;

    switch(uMessage)
    {
        case WM_CREATE:
            s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
            break;

        default:
            if(uMessage == s_uTaskbarRestart)
                AddTaskbarIcons();
            break;
    }

    return DefWindowProc(hWnd, uMessage, wParam, lParam);
}