Shell_notifyicon & NOTIFYICONDATA
Мы пытаемся использовать Shell_NotifyIcon вместе со структурой NOTIFYICONDATA. В окне 10 мы видим , что если мы попытаемся отобразить область уведомлений с воздушным шаром вместе со значком заголовка, значок будет копироваться во временную папку каждый раз, когда он отображается. Возможно, чтобы избежать этого ? У нас есть определенный вариант использования, из-за которого мы не хотим, чтобы какая-либо операция копирования файла срабатывала при отображении уведомлений.
Пример кода, который мы попробовали, выглядит следующим образом:
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, он не копирует значок во временную папку
KarstenK
Я не понимаю!!! Даже если икона уже есть?
Похоже на ошибку Microsoft. Вы должны связаться с ними и отбросить всякую надежду на исправление. (Извините за это)