explorer.exe 重启后托盘图标会消失。需要程序重新加入到托盘。
explorer关闭后windows taskbar也就没有了,托盘图标也就跟着消失了。当explorer进程重启,taskbar将会被创建,taskbar创建后会使用字符串“TaskbarCreated”注册一个消息,然后将这个消息广播到它的所有top-level windows。因此我们可以去注册并捕获这个消息,然后在消息处理函数中调用Shell_NotifyIcon(NIM_ADD, &m_nid); 重新将托盘图标添加上。
//头文件声明
afx_msg LRESULT OnTaskBarCreated(WPARAM wParam, LPARAM lParam);
//cpp文件实现
const UINT WM_TaskbarCreated = RegisterWindowMessage(TEXT("TaskbarCreated"));
BEGIN_MESSAGE_MAP(CMainFrame, CWnd)
ON_REGISTERED_MESSAGE(WM_TaskbarCreated, OnTaskBarCreated)
END_MESSAGE_MAP()
LRESULT CMainFrame::OnTaskBarCreated(WPARAM wParam, LPARAM lParam)
{
// 把自己加到托盘
NOTIFYICONDATA tnd;
tnd.cbSize = NOTIFYICONDATA_V1_SIZE;
tnd.hWnd = m_hWnd;
tnd.uID = IDR_MAINFRAME;
tnd.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
tnd.uCallbackMessage = WM_TRAYMESSAGE;
tnd.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
_tcscpy_s(tnd.szTip, _T("程序名称"));
Shell_NotifyIcon(NIM_ADD, &tnd);
return 0;
}