托盘图标异常消失问题的分析与解决

来源:互联网 发布:南京软件企业 编辑:程序博客网 时间:2024/06/05 18:13

        经测试发现,对于使用托盘图标的程序,托盘图标有时会出现如下的异常:

        (1)当资源管理器explorer.exe异常重启后,程序在任务栏的托盘图标会消失;

        (2)在个别机器上出现托盘图标因不明原因消失,而此时程序依然在运行(任务管理器中能找到对应的进程)。

        针对第一种情况,在explorer.exe异常重启时,会产生一个叫做TaskbarCreated的消息,可以在响应该消息时,将托盘图标加到托盘图标区域,以规避此种情况中出现的问题。相关代码如下所示:

UINT m_uMsgTaskbarRestart;        ......m_uMsgTaskbarRestart = RegisterWindowMessage(_T("TaskbarCreated")); \\ 注册这个消息,记录消息ID        ......LRESULT CXXDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam){if ( message == m_uMsgTaskbarRestart ){Shell_NotifyIcon( NIM_ADD, &m_nid);}return CDialog::DefWindowProc( message, wParam, lParam );}
        对于第二种情况,具体的原因不明,也可以找到一种办法来规避掉:开启一个守护托盘图标的定时器,定时检测托盘图标是否存在,不存在则添加,相关代码如下:(只给出定时器消息响应函数的代码段)

void CXXDlg::OnTimer( UINT_PTR nIDEvent ){if ( nIDEvent == 100 ){if ( !Shell_NotifyIcon( NIM_MODIFY, &m_nid ) )Shell_NotifyIcon( NIM_ADD, &m_nid );}CDialog::OnTimer(nIDEvent);}


原创粉丝点击