NOTIFYICONDATA 图标通知c++
NOTIFYICONDATA icon notification c++
我有一个作为服务运行的应用程序,以及一个监视该服务的辅助应用程序。监控应用程序使用 NOTIFYICONDATA
存在于系统托盘中,工作正常。
我目前正在尝试做的是,当应用程序注意到服务已停止时,我想显示一条通知(类似于笔记本电脑的电池 运行 电量不足)。我的代码基于 this article。我必须执行的功能如下:
void CALLBACK checkit( HWND hwnd, UINT umsg, UINT timerid, DWORD dwtime ) {
if ( isServiceRunning() ) {
if ( nidApp.dwInfoFlags != NIIF_NONE ) {
Log( "dwInfoFlags != NIFF_NONE" );
nidApp.dwInfoFlags = NIIF_NONE;
strcpy_s( nidApp.szInfoTitle, sizeof( nidApp.szInfoTitle ), "" );
strcpy_s( nidApp.szInfo, sizeof( nidApp.szInfoTitle ), "" );
Log( "%d", Shell_NotifyIcon( NIM_MODIFY, &nidApp ) );
}
} else {
if ( nidApp.dwInfoFlags != NIIF_WARNING ) {
Log( "dwInfoFlags != NIIF_WARNING" );
nidApp.dwInfoFlags = NIIF_WARNING;
strcpy_s( nidApp.szInfoTitle, sizeof( nidApp.szInfoTitle ), "Service Stopped" );
strcpy_s( nidApp.szInfo, sizeof( nidApp.szInfo ), "The " PROGRAM_NAME " service has been stopped. Any runs in progress have been terminated." );
nidApp.uTimeout = 10000;
Log( "%d", Shell_NotifyIcon( NIM_MODIFY, &nidApp ) );
}
}
}
此函数每五秒调用一次。使用日志,我可以看到 dwInfoFlags
设置正确,Shell_NotifyIcon
returns TRUE
,但是没有显示任何通知。我确定我一定遗漏了什么,但我无法弄清楚它是什么。
nidApp
在 CPP 文件的顶部定义为 NOTIFYICONDATA nidApp;
,设置如下:
hMainIcon = LoadIcon( hInstance, (LPCTSTR)MAKEINTRESOURCE( IDI_ICON1 ) );
nidApp.cbSize = sizeof( NOTIFYICONDATA ); // sizeof the struct in bytes
nidApp.hWnd = (HWND)hWnd; //handle of the window which will process this app. messages
nidApp.uID = IDI_ICON1; //ID of the icon that willl appear in the system tray
nidApp.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP | NIF_GUID | NIF_SHOWTIP; //ORing of all the flags
nidApp.hIcon = hMainIcon; // handle of the Icon to be displayed, obtained from LoadIcon
nidApp.uCallbackMessage = WM_USER_SHELLICON;
nidApp.uVersion = NOTIFYICON_VERSION_4;
nidApp.guidItem = myGUID;
strcpy_s( nidApp.szTip, sizeof( nidApp.szTip ), PROGRAM_NAME " Service Controller" );
Shell_NotifyIcon( NIM_ADD, &nidApp );
Shell_NotifyIcon( NIM_SETVERSION, &nidApp );
您应该将 nidApp.uFlags
设置为 NIF_INFO
以显示通知。现在您调用 Shell_NotifyIcon
时使用的标志与用于创建通知图标的标志相同。
我有一个作为服务运行的应用程序,以及一个监视该服务的辅助应用程序。监控应用程序使用 NOTIFYICONDATA
存在于系统托盘中,工作正常。
我目前正在尝试做的是,当应用程序注意到服务已停止时,我想显示一条通知(类似于笔记本电脑的电池 运行 电量不足)。我的代码基于 this article。我必须执行的功能如下:
void CALLBACK checkit( HWND hwnd, UINT umsg, UINT timerid, DWORD dwtime ) {
if ( isServiceRunning() ) {
if ( nidApp.dwInfoFlags != NIIF_NONE ) {
Log( "dwInfoFlags != NIFF_NONE" );
nidApp.dwInfoFlags = NIIF_NONE;
strcpy_s( nidApp.szInfoTitle, sizeof( nidApp.szInfoTitle ), "" );
strcpy_s( nidApp.szInfo, sizeof( nidApp.szInfoTitle ), "" );
Log( "%d", Shell_NotifyIcon( NIM_MODIFY, &nidApp ) );
}
} else {
if ( nidApp.dwInfoFlags != NIIF_WARNING ) {
Log( "dwInfoFlags != NIIF_WARNING" );
nidApp.dwInfoFlags = NIIF_WARNING;
strcpy_s( nidApp.szInfoTitle, sizeof( nidApp.szInfoTitle ), "Service Stopped" );
strcpy_s( nidApp.szInfo, sizeof( nidApp.szInfo ), "The " PROGRAM_NAME " service has been stopped. Any runs in progress have been terminated." );
nidApp.uTimeout = 10000;
Log( "%d", Shell_NotifyIcon( NIM_MODIFY, &nidApp ) );
}
}
}
此函数每五秒调用一次。使用日志,我可以看到 dwInfoFlags
设置正确,Shell_NotifyIcon
returns TRUE
,但是没有显示任何通知。我确定我一定遗漏了什么,但我无法弄清楚它是什么。
nidApp
在 CPP 文件的顶部定义为 NOTIFYICONDATA nidApp;
,设置如下:
hMainIcon = LoadIcon( hInstance, (LPCTSTR)MAKEINTRESOURCE( IDI_ICON1 ) );
nidApp.cbSize = sizeof( NOTIFYICONDATA ); // sizeof the struct in bytes
nidApp.hWnd = (HWND)hWnd; //handle of the window which will process this app. messages
nidApp.uID = IDI_ICON1; //ID of the icon that willl appear in the system tray
nidApp.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP | NIF_GUID | NIF_SHOWTIP; //ORing of all the flags
nidApp.hIcon = hMainIcon; // handle of the Icon to be displayed, obtained from LoadIcon
nidApp.uCallbackMessage = WM_USER_SHELLICON;
nidApp.uVersion = NOTIFYICON_VERSION_4;
nidApp.guidItem = myGUID;
strcpy_s( nidApp.szTip, sizeof( nidApp.szTip ), PROGRAM_NAME " Service Controller" );
Shell_NotifyIcon( NIM_ADD, &nidApp );
Shell_NotifyIcon( NIM_SETVERSION, &nidApp );
您应该将 nidApp.uFlags
设置为 NIF_INFO
以显示通知。现在您调用 Shell_NotifyIcon
时使用的标志与用于创建通知图标的标志相同。