[ad_1]
NOTIFYICONDATA 構造とともに Shell_NotifyIcon を使用しようとしています。 ウィンドウ 10 で、タイトル アイコンと共にバルーン通知領域を表示しようとすると、アイコンが表示されるたびに一時フォルダーにコピーされることがわかります。 これを回避することは可能ですか? 通知の表示中にファイル コピー操作をトリガーしたくない特定のユース ケースがあります。
試したサンプルコードは次のとおりです。
C++
void CTrayIconTestDlg::AddIconToSysTray() { HICON m_hIconInfo = NULL;//(HICON)::LoadImage(), MAKEINTRESOURCE(IDI_ICON_INFO), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR | LR_LOADTRANSPARENT); // TODO: Add your control notification handler code here NOTIFYICONDATA NID; memset(&NID, 0, sizeof(NID)); //on main function: NID.cbSize = sizeof(NID); NID.hIcon = this->m_hIcon; NID.hWnd = this->m_hWnd; NID.uID = WM_USER + 2; StrCpyW(NID.szTip, L"System Tray Icon: Hello World"); //in a timer: NID.uFlags = NID.uFlags | NIF_ICON | NIF_TIP ; Shell_NotifyIcon(NIM_ADD, &NID); //CDialogEx::OnOK(); } void CTrayIconTestDlg::DisplayNotification() { // TODO: Add your control notification handler code here NOTIFYICONDATA NID; memset(&NID, 0, sizeof(NID)); //on main function: NID.cbSize = sizeof(NID); NID.hIcon = this->m_hIcon; NID.hWnd = this->m_hWnd; NID.uID = WM_USER + 2; StrCpyW(NID.szTip, L"System Tray Icon: Hello World"); //in a timer: NID.uFlags = NID.uFlags | NIF_ICON | NIF_INFO | NIF_TIP ; StrCpyW(NID.szInfoTitle, L"This is balloon title"); StrCpyW(NID.szInfo, L"This is balloon Information detailed"); NID.uTimeout = 5000; NID.dwInfoFlags = NID.dwInfoFlags | NIIF_INFO; //NID.dwInfoFlags = NID.dwInfoFlags | NIIF_USER; //NID.hBalloonIcon = this->m_hIcon; BOOL res = Shell_NotifyIcon(NIM_MODIFY, &NID); if( res == FALSE ) MessageBoxA(NULL, "False", "", MB_OK); }
私が試したこと:
1) MSDN ドキュメント
2) Windows 7 で同じコードを試しましたが、アイコンが一時フォルダーにコピーされません。
解決策 1
やあ、
Windows 10 でこれを回避することはできません。バグ レポートを受け入れるこれらの製品のいずれかを使用している場合は、バグを報告することをお勧めします。
[Microsoft Connect]
バグが「仕様により」クローズされることに備えてください。
また、 フィードバック ハブ[^] この機能に関するフィードバックを送信します。
幸運をお祈りしています、
-デヴィッド・ドローヌ
解決策 2
#include <Windows.h> int main() { // Create a NOTIFYICONDATA structure NOTIFYICONDATA nid; ZeroMemory(&nid, sizeof(nid)); nid.cbSize = sizeof(nid); nid.hWnd = NULL; nid.uID = 1; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nid.uCallbackMessage = WM_USER; nid.uTimeout = 15; HANDLE hIcon = LoadImageW(NULL, L"icon.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE); if (hIcon == NULL) { // handle error } else { nid.hIcon = LoadIcon((HINSTANCE)hIcon, IDI_APPLICATION); } lstrcpy(nid.szTip, L"My Notification"); // Show the notification Shell_NotifyIcon(NIM_ADD, &nid); // Show a balloon notification nid.uFlags = NIF_INFO; lstrcpy(nid.szInfo, L"message!"); lstrcpy(nid.szInfoTitle, L"Title"); nid.dwInfoFlags = NIIF_ERROR; Shell_NotifyIcon(NIM_MODIFY, &nid); // Wait for the user to dismiss the notification Sleep(3000); // Remove the notification Shell_NotifyIcon(NIM_DELETE, &nid); return 0; }
[ad_2]
コメント