如何创建没有任何窗口的任务栏按钮?

Posted

技术标签:

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

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

【问题讨论】:

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

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于如何创建没有任何窗口的任务栏按钮?的主要内容,如果未能解决你的问题,请参考以下文章

Electron应用在任务栏中创建闪烁窗口

Tkinter,Windows:如何在没有标题栏的 Windows 任务栏中查看窗口?

打开的程序如何快速最小化到任务栏

windows下QT程序如何最小化到任务栏

使子窗口出现在任务栏中

如何通过单击任务栏图标禁用最小化