使用Windows API或WMI来确定进程是否显示在任务栏中

所以,我正在写一个docker/任务栏像应用程序。 我想要做的很简单,显示正在运行的程序列表。

我发现了许多方法来枚举所有正在运行的进程,但经过几个小时的谷歌search,我找不到方法来确定哪些应该显示在任务栏中。

Windows任务pipe理器为例。 它有两个选项卡,一个名为Applicationss,另一个名为进程。 进程包含所有的系统进程,而程序以某种方式获得计算机上运行的“应用程序”列表。 我想能够访问我的程序中的应用程序列表,而不是进程列表,所以在我的伪taksbar我不显示像taskhost.exe,winlogon.exe等东西

理想情况下,我将能够获得任务栏中显示的程序的确切列表。 我的程序是Python,我有Windows API和WMI访问,但是如果我必须为C函数编写Python包装,我会这样做。

据我所知,Windows Tasksbar API更像是为现有的图标添加菜单或进度条,我找不到方法来访问我正在寻找的信息。 我错了吗?

谢谢!

此处记录了顶级窗口出现在任务栏中的规则。 综上所述:

每当应用程序创建一个不属于的窗口时,Shell在任务栏上创建一个按钮。 为了确保窗口按钮放置在任务栏上,使用WS_EX_ APPWINDOW扩展样式创建一个无主窗口。 要防止将窗口按钮放置在任务栏上,请使用WS_EX_ TOOLWINDOW扩展样式创建无主窗口。 或者,您可以创建一个隐藏窗口,并将此隐藏窗口设置为可见窗口的所有者。

有关更多讨论,请看看Raymond Chen关于此事的文章 。