【问题标题】:how to create taskbar button w/o any window?如何创建没有任何窗口的任务栏按钮?
【发布时间】:2011-01-31 16:03:34
【问题描述】:

我有一个简单的无 UI 应用程序,然后将其转换为 Windows 服务。但是对于测试,查看它何时运行会很有用。所以我想像其他具有 UI 的应用程序一样创建一个任务栏按钮。是否可以通过合理的努力?

【问题讨论】:

  • Taskmgr.exe 可以显示进程,足够测试了。
  • @Hans:但不适合我的客户
  • 您的客户正在测试您的代码?不寻常。

标签: c++ windows winapi


【解决方案1】:

不,这是不可能的。任务栏上的按钮代表 windows。你不能有一个没有窗口的按钮,并且那个窗口需要是可见的。 (窗口可以具有将其置于屏幕之外的坐标,并且可以具有零尺寸,但它需要具有WS_VISIBLE 样式。)

另一个选项是创建一个通知图标。它也需要有一个窗口,但窗口不必是可见的。但是,如果最终目标是让程序成为一种服务,那么设置该设置可能比您想要的要多。服务不能显示通知图标或有窗口。

也许最简单的改变就是让你的程序成为一个控制台程序。然后操作系统将为您创建一个控制台窗口。您的程序不必以任何方式创建或管理它。

【讨论】:

    【解决方案2】:

    创建一个ITaskbarList 类型的对象,然后在其上调用AddTab 方法。你不需要一个可见的窗口来工作。一个虚拟的、不可见的窗口就可以了。 当然,如果你不使用上面提到的方法手动添加,任务栏中不会出现这样的窗口。

    【讨论】:

      【解决方案3】:

      创建一个自定义窗口类并保持窗口始终最小化或始终不可见(大小为 0 且位置接近 -32767)

      【讨论】:

        【解决方案4】:

        Windows 服务应该有 UI。事实上,在 Windows Vista 和 Windows 7 中,它们在不同的会话中运行,并且无法访问桌面。

        要监控您的服务,您需要编写另一个应用程序。通常此类应用程序在隐藏窗口中运行,并使用notification area 与用户进行交互。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-02
          • 2010-09-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多