最後の試みです。URL の下に詳細が記載されている問題を解決しようとしています。URL に記載されている記事を確認しましたが、関連するアイコンを非表示にできません。誰でもアイデアはありますか?
http://www.codeproject.com/Articles/10807/Shell-Tray-Info-Arrange-your-system-tray-icons
http://social.msdn.microsoft.com/Forums/da/vbgeneral/thread/a11faa45-a3ea-4060-8de4-a6bc22e1516d
Windows 音声認識によってロードされるシステム トレイ アイコンを非表示にできるようにしたい (Windows 7 および Windows 8 および Windows Vista の一部として提供されます)。私は C# でそれを行う必要があり、ここ数日間 Google のソリューションを試してきましたが、役に立ちませんでした。次のコードを使用するのが最善の方法のようです。
//上で定義した NotifyIconData 構造体
private void button1_Click(object sender, EventArgs e)
{
NOTIFYICONDATA pnid = new NOTIFYICONDATA();
pnid.uCallbackMessage = 0x800;
pnid.uFlags = 1;
pnid.hwnd = ???;
pnid.uID = 1;
pnid.szTip = null;
pnid.uFlags |= 2;
pnid.hIcon = ???;
pnid.uFlags |= 4;
pnid.szTip = "Speech Recognition is listening";
bool b = Shell_NotifyIcon(2, ref pnid);
Shell_NotifyIcon API 関数 (2) の第 1 引数は削除です。問題は、アイコンハンドルを含む疑問符付きの引数を見つける方法がわからないことです。ウィンドウの音声認識ショートカットと、タスク マネージャーのファイルの場所 (%windir%\Speech\Common\sapisvr.exe -SpeechUX) で示されるファイルの場所によって示される実行可能ファイルを使用して ExtractIcon を使用しようとしましたが、実行可能ファイルに関連するアイコンはありません。また、その実行可能ファイルのアイコンを確認するためにダウンロードした無料のアプリケーションでも確認しましたが、同じことを言いました。
以下を使用して、アイコン トレイのウィンドウ ハンドルを取得できます。
IntPtr hWnd = Win32API.FindWindow("Shell_TrayWnd", null);
if(hWnd.ToInt32() > 0)
{
hWnd = Win32API.FindWindowEx(hWnd, IntPtr.Zero, "TrayNotifyWnd", null);
if (hWnd.ToInt32() > 0)
{
hWnd = Win32API.FindWindowEx(hWnd,IntPtr.Zero, "SysPager", null);
if (hWnd.ToInt32() > 0)
{
hWnd = Win32API.FindWindowEx(hWnd, IntPtr.Zero, "ToolbarWindow32", null);
}
// count = Win32API.SendMessage(hWnd, 1048 , 0, 0);
}
}
ただし、ハンドルとアイコンの数を使用しても、アイコンハンドルを列挙する方法がわかりません。
Windows 7 と Windows 8 で無料で提供される Windows 音声認識をロードすることで簡単に試すことができ、アイコンが表示されます。C++ ソリューションを使用することもできますが、完全にマネージド C++ (.NET) にする必要があります。