奇怪的托盘右键失灵,托盘气泡显示不正常引起的托盘右键消息问题?

问题描述
以前的一个VC++ MFC写的程序,极少数客户反映有时候托盘右键失灵,造成无法关闭程序。在了解详细原因后,发现其托盘气泡也显示不正常。有些是设置了注册表禁用了气泡显示。

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
"EnableBalloonTips"=dword:00000000

所以造成了托盘消息不正常反馈。自然右键就失灵了。

解决
经过多次试验证,在显示完气泡后,要清空气泡结构信息缓存。

//  设置气泡显示
memset(m_Nid.szInfoTitle,"\0",64);
memset(m_Nid.szInfo,"\0",256);
wcsncpy_s(m_Nid.szInfo,(LPCTSTR)csInfo,64); 
wcsncpy_s(m_Nid.szInfoTitle,(LPCTSTR)csTitle,256);
Shell_NotifyIcon(NIM_MODIFY, &m_Nid); 

// 这里一定要清空,不然右键菜将失灵
memset(m_Nid.szInfoTitle,"\0",64);
memset(m_Nid.szInfo,"\0",256);
wcscpy_s(m_Nid.szInfo,_T("")); 
wcscpy_s(m_Nid.szInfoTitle,_T(""));
Shell_NotifyIcon(NIM_MODIFY, &m_Nid);