0

プログラムをバックグラウンドで実行し、タスクバーの通知領域にアイコンを表示したい。win32を使用しています。どの API を使用すればよいですか? 良いチュートリアルを知っていますか?

4

3 に答える 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

CSystemTray は coeproject からうまく機能しますShell_NotifyIconのラッパーです。

于 2010-09-08T23:31:12.320 に答える