[英]c++ create program runs in the background
我想讓程序在后台運行,並在任務欄的通知區域顯示一個圖標。 我正在使用win32。 我應該使用什么API? 你知道任何好的教程嗎?
要使程序在后台運行,您可以將其添加為服務,或者使其“不可用”以關閉(例如,隱藏該程序的窗口)。 要在工具欄中添加圖標,請使用winapi。 調用Shell_NotifyIcon並傳入NOTIFYICONDATA結構
應該在某處定義
enum TrayIcon {
ID = 13, CALLBACKID = WM_APP+1
};
另外,在下面的代碼中, hWnd
是HWND
,這是您要與通知圖標關聯的窗口。 該HWND's
wndProc
將接收該圖標的消息。
NIF_ICON
標志使hIcon
在NOTIFICATIONICONDATA
結構中有效。 因此,如果您不想有圖標,請不要指定它。 NIF_MESSAGE
標志使uCallbackMessage
有效。 如果您不想處理任何消息,請不要指定此標志。 如此說來,這就是您添加,刪除和處理任務欄圖標消息的方式
// 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.