【问题标题】:C++ system tray only program仅 C++ 系统托盘程序
【发布时间】:2019-01-23 17:21:10
【问题描述】:

在检查了微软关于系统托盘图标的文档(我可以找到)之后:

Shell_NotifyIconA function

NOTIFYICONDATAA structure

我注意到需要一个窗口句柄 (HWND)。这对我想要完成的事情非常不利,因为我正在寻找一个只对系统托盘做出反应的程序:它不会将窗口“最小化”到托盘,它只是使用通知(点击/右键单击图标)进行交互。

我该怎么做呢?

【问题讨论】:

  • 您可以创建一个窗口并且从不显示它。
  • 天哪,这真的是它的本意吗?我无法通过 nullptr 或任何东西吗?
  • @ZeroZ30o 关键是您传递的窗口是消息的目标。在 Win32 中使用窗口仅用于消息传递并不少见——甚至还有仅消息窗口的概念(没有实际关联的绘图表面或任何东西)。
  • 您可以使用Message-Only window: "仅消息窗口使您能够发送和接收消息。它不可见,没有 z 顺序,无法枚举,并且确实不接收广播消息。窗口只是发送消息。"
  • @RemyLebeau 不幸的是,a message-only window doesn't receive WM_QUERYENDSESSION 和其他广播消息。所以如果你想优雅地关闭,而不是被终止,一个普通的隐藏窗口会是一个更好的选择。

标签: c++ winapi system-tray


【解决方案1】:

Windows 7 SDK 包含一个名为 NotificationIcon 的示例。这个例子包含一行

ShowWindow(hwnd, nCmdShow);

在其wWinMain 函数中。这个调用的效果是你看到了一个程序窗口。

只需将此行更改为

ShowWindow(hwnd, SW_HIDE);

隐藏程序窗口,只在系统托盘中显示图标。正如其他人指出的那样,该程序需要一个程序窗口,即使它不可见。

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 2012-09-16
  • 1970-01-01
相关资源
最近更新 更多