プログラムをバックグラウンドで実行し、タスクバーの通知領域にアイコンを表示したい。win32を使用しています。どの API を使用すればよいですか? 良いチュートリアルを知っていますか?
3155 次
3 に答える
2
プログラムをバックグラウンドで実行するには、プログラムをサービスとして追加するか、シャットダウンするために「使用不可」にします(たとえば、プログラムのウィンドウを非表示にします)。ツールバーにアイコンを追加するには、winapiを使用します。Shell_NotifyIconを呼び出し、NOTIFYICONDATA構造体を渡します
これはどこかで定義する必要があります
enum TrayIcon {
ID = 13, CALLBACKID = WM_APP+1
};
また、以下のコードでhWnd
は、はHWND
、通知アイコンに関連付けるウィンドウであるです。これHWND's
wndProc
は、アイコンのメッセージを受信します。
ノート:
NIF_ICON
フラグは構造体で有効にhIcon
なります。NOTIFICATIONICONDATA
したがって、アイコンが必要ない場合は、指定しないでください。NIF_MESSAGE
フラグがuCallbackMessage
有効になります。メッセージを処理したくない場合は、このフラグを指定しないでください。- プログラムをシャットダウンする前にアイコンを削除する必要があります。そうしないと、アイコンにカーソルを合わせるまでアイコンが動かなくなります。
- コンピューターの起動時に、Shell_NotifyIconが成功するのにいくつかの問題がある場合があります。参照が見つかりませんが、どこかで読んだことがあります。したがって、成功しなかった場合は、まったく機能しないとは思わないでください。もう一度やり直してください。
そうは言っても、これがトレイアイコンのメッセージを追加、削除、処理する方法です
アイコンを追加するには
// in HICON hIcon: this is the icon you want as the image in the tray
NOTIFYICONDATA nid;
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = hWnd;
nid.uID = ID;
nid.uFlags = NIF_ICON | NIF_MESSAGE;
nid.hIcon = hIcon;
nid.uCallbackMessage = /*TrayIcon::*/CALLBACKID;
Shell_NotifyIcon(NIM_ADD, &nid);
アイコンを削除するには
NOTIFYICONDATA nid;
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = hWnd;
nid.uID = /*TrayIcon::*/ID;
Shell_NotifyIcon(NIM_DELETE, &nid);
アイコンのメッセージの処理
LRESULT wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
switch (msg){
// ...
case /*TrayIcon::*/CALLBACKID:
{
// here, you handle the messages for your tray icon
}
break;
// ...
}
}
于 2010-09-09T00:30:55.057 に答える
1
http://www.winprog.org/tutorial/は、winapi と基本的に Windows アプリのしくみを学習するのに適しています。トレイ アイコンには、 を使用しますShell_NotifyIcon
。これには、ウィンドウとメッセージ ループが必要です。
于 2010-09-08T23:09:27.983 に答える
0
于 2010-09-08T23:31:12.320 に答える