vikramlinux Ответов: 1

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. Вы должны связаться с ними и отбросить всякую надежду на исправление. (Извините за это)

1 Ответов

Рейтинг:
0

Randor

Привет,

Избежать этого в Windows 10 невозможно. Вы можете подать сообщение об ошибке, если используете один из этих продуктов, принимающих сообщения об ошибках:

[Microsoft Connect]

Будьте готовы к тому, что ваш баг будет закрыт как "по замыслу".

Вы также можете использовать Концентратор Обратной Связи[^] чтобы отправить отзыв об этой функции.

с наилучшими пожеланиями,
- Дэвид Делон