如何去掉任务栏上的Notification(续)

来源:互联网 发布:vb怎么安装msdn 编辑:程序博客网 时间:2024/04/29 19:35
 

上次说修改键值来达到删除Notification的目的,但可能会产生副作用,比方说Today Screen里面的计数可能会因为这个注册表的改动而显示了错误的值。

[HKEY_CURRENT_USER/System/State/Messages/sms/Unread]

"Count"=0

 

后来在网上搜了一下,codeproject上有个人是通过SHNotificationRemove实现的,我修改了一下,sample code如下:

  1. void RemoveNewMessageNotification() 
  2.     SHNOTIFICATIONDATA shnd; 
  3.     CLSID clsid; 
  4.     LRESULT result; 
  5.     DWORD dwID = 0; 
  6.     if (0 == CLSIDFromString(TEXT("{A877D65B-239C-47a7-9304-0D347F580408}"), &clsid)) 
  7.     { 
  8.             memset(&shnd, 0, sizeof(shnd)); 
  9.             shnd.cbStruct = sizeof(SHNOTIFICATIONDATA); 
  10.             do 
  11.             { 
  12.                 result = SHNotificationGetData(&clsid,dwID,&shnd); 
  13.                 if (ERROR_SUCCESS == result) 
  14.                 { 
  15.                     SHNotificationRemove(&clsid,dwID); 
  16.                     if (shnd.pszHTML)
  17.                     {
  18.                         free((void *) shnd.pszHTML); 
  19.                         shnd.pszHTML = NULL; 
  20.                     }
  21.                     if (shnd.pszTitle) 
  22.                     {
  23.                         free((void *) shnd.pszTitle); 
  24.                         shnd.pszTitle = NULL; 
  25.                     }
  26.                 } 
  27.                 else 
  28.                     dwID++; 
  29.             } while ((ERROR_SUCCESS != result) && (dwID < 20000)); 
  30.     }