C++ c++;在后台创建程序运行
我想让一个程序在后台运行,并在任务栏的通知区域显示一个图标。我正在使用win32。我应该使用什么api?你知道什么好的教程吗?有助于学习winapi和Windows应用程序的基本工作原理。对于托盘图标,请使用C++ c++;在后台创建程序运行,c++,winapi,system-tray,background-process,C++,Winapi,System Tray,Background Process,我想让一个程序在后台运行,并在任务栏的通知区域显示一个图标。我正在使用win32。我应该使用什么api?你知道什么好的教程吗?有助于学习winapi和Windows应用程序的基本工作原理。对于托盘图标,请使用Shell\u NotifyIcon。您需要一个窗口和一个消息循环来完成此操作。有助于学习winapi和Windows应用程序的基本工作原理。对于托盘图标,请使用Shell\u NotifyIcon。为此,您需要一个窗口和一个消息循环。。 它是一个包裹物。。 它是一个包装器。要使程序在后台运
Shell\u NotifyIcon
。您需要一个窗口和一个消息循环来完成此操作。有助于学习winapi和Windows应用程序的基本工作原理。对于托盘图标,请使用Shell\u NotifyIcon
。为此,您需要一个窗口和一个消息循环。。
它是一个包裹物。。
它是一个包装器。要使程序在后台运行,您可以将其添加为服务或使其“不可用”以关闭(例如,隐藏程序的窗口)。要在工具栏中添加图标,请使用winapi。结构中的调用和传递 这应该在某个地方定义
enum TrayIcon {
ID = 13, CALLBACKID = WM_APP+1
};
此外,在下面的代码中,hWnd
是一个hWnd
,这是要与通知图标关联的窗口。此HWND的wndProc
将接收图标的消息
笔记:
NIF_图标
标志使hIcon
在notificationiconda
结构中有效。因此,如果你不想有一个图标,不要指定它
NIF_MESSAGE
标志使uCallbackMessage
有效。如果不想处理任何消息,请不要指定此标志
- 您必须在关闭程序之前删除该图标,否则它将卡在那里,直到您将鼠标悬停在其上
- 启动计算机时,Shell_NotifyIcon可能会遇到一些困难。我找不到它的参考资料,但我知道我在什么地方读过。。所以,当不成功时,不要认为它根本不起作用——再试一次
如上所述,这就是如何添加、删除和处理托盘图标的消息
添加图标
要删除图标
处理图标的消息
要使程序在后台运行,可以将其添加为服务或使其“不可用”以关闭(例如,隐藏程序的窗口)。要在工具栏中添加图标,请使用winapi。结构中的调用和传递
这应该在某个地方定义
enum TrayIcon {
ID = 13, CALLBACKID = WM_APP+1
};
此外,在下面的代码中,hWnd
是一个hWnd
,这是要与通知图标关联的窗口。此HWND的wndProc
将接收图标的消息
笔记:
NIF_图标
标志使hIcon
在notificationiconda
结构中有效。因此,如果你不想有一个图标,不要指定它
NIF_MESSAGE
标志使uCallbackMessage
有效。如果不想处理任何消息,请不要指定此标志
- 您必须在关闭程序之前删除该图标,否则它将卡在那里,直到您将鼠标悬停在其上
- 启动计算机时,Shell_NotifyIcon可能会遇到一些困难。我找不到它的参考资料,但我知道我在什么地方读过。。所以,当不成功时,不要认为它根本不起作用——再试一次
如上所述,这就是如何添加、删除和处理托盘图标的消息
添加图标
要删除图标
处理图标的消息
正式来说,您指的是“任务栏的通知区域”。这些术语可能会帮助您找到比“任务栏”更好的搜索结果。有人将问题编辑为“任务栏的通知区域”。正式而言,您指的是“任务栏的通知区域”。这些术语可能会帮助你找到比“任务栏”更好的搜索结果。
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;
// ...
}
}