私はサービスとして動作するアプリケーションと、サービスを監視するセカンダリアプリケーションを持っています。監視アプリケーションは、システムトレイにNOTIFYICONDATA
を使用して正常に動作します。NOTIFYICONDATAアイコン通知C++
私が現在やりたいことは、アプリケーションがサービスが停止したことに気づいたときです。通知が表示されるようにします(電池がノートパソコンで不足している場合と同様です)。コードを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));
}
}
}
この機能は5秒ごとに呼び出されます。ログを使用して、dwInfoFlags
が正しく設定されており、Shell_NotifyIcon
がTRUE
を返すことがわかりましたが、通知は表示されません。私は何かが欠けているに違いないと確信していますが、それが何であるか把握できません。
nidApp
は、以下のように設定があるようNOTIFYICONDATA nidApp;
としてCPPファイルの先頭で定義されています
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);
ありがとうございます。私はuFlagsオプションの残りの部分にこれを追加しました。 –