【问题标题】:c++ create program runs in the backgroundc++创建程序在后台运行
【发布时间】:2010-09-08 23:07:13
【问题描述】:

我想让一个程序在后台运行并在任务栏的通知区域显示一个图标。我用的是win32。我应该使用什么api?你知道什么好的教程吗?

【问题讨论】:

  • 官方指的是“任务栏的通知区域”。这些术语可能会帮助您找到比“托盘栏”更好的搜索结果。
  • 有人编辑问题说“任务栏的通知区域”。

标签: c++ winapi system-tray background-process


【解决方案1】:

要使程序在后台运行,您可以将其添加为服务或使其“不可用”以关闭(例如,隐藏程序的窗口)。要在工具栏中添加图标,请使用 winapi。调用Shell_NotifyIcon 并传入NOTIFYICONDATA 结构

这应该在某个地方定义

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

另外,在下面的代码中,hWnd 是一个HWND,这是您要与通知图标关联的窗口。这个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;
        // ...
    }
}

【讨论】:

    【解决方案2】:

    http://www.winprog.org/tutorial/ 非常适合学习 winapi 以及 Windows 应用程序的基本工作原理。对于托盘图标,使用Shell_NotifyIcon。为此,您需要一个窗口和一个消息循环。

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 2011-02-23
        • 1970-01-01
        • 1970-01-01
        • 2013-01-30
        • 1970-01-01
        • 2011-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多