簡體   English   中英

C ++創建程序在后台運行

[英]c++ create program runs in the background

我想讓程序在后台運行,並在任務欄的通知區域顯示一個圖標。 我正在使用win32。 我應該使用什么API? 你知道任何好的教程嗎?

要使程序在后台運行,您可以將其添加為服務,或者使其“不可用”以關閉(例如,隱藏該程序的窗口)。 要在工具欄中添加圖標,請使用winapi。 調用Shell_NotifyIcon並傳入NOTIFYICONDATA結構

應該在某處定義

enum TrayIcon {
    ID = 13, CALLBACKID = WM_APP+1
};

另外,在下面的代碼中, hWndHWND ,這是您要與通知圖標關聯的窗口。 HWND's wndProc將接收該圖標的消息。

筆記:

  • NIF_ICON標志使hIconNOTIFICATIONICONDATA結構中有效。 因此,如果您不想有圖標,請不要指定它。
  • 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;
        // ...
    }
}

http://www.winprog.org/tutorial/對於學習winapi以及Windows應用程序的工作原理非常有用。 對於任務欄圖標,請使用Shell_NotifyIcon 您將需要一個窗口和一個消息循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM