【解決方法】Shell_notifyicon & NOTIFYICONDATA

[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]

コメント

タイトルとURLをコピーしました