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

5
所以,我正在编写一个类似于dock/taskbar的应用程序。我想要做的事情非常简单,就是显示一个运行程序列表。
我找到了很多枚举所有正在运行进程的方法,但经过数小时的谷歌搜索,我无法找到一种确定哪些进程应该显示在任务栏中的方法。
以Windows任务管理器为例。它有两个选项卡,一个名为Applications,另一个名为Processes。Processes包含所有系统进程,而programs以某种方式获取计算机上运行的"应用程序"列表。我想能够在我的程序中访问应用程序列表,而不是进程列表,这样在我的伪任务栏中,我不会显示像taskhost.exe、winlogon.exe等东西。
理想情况下,我将能够获取任务栏中显示的确切程序列表。我的程序使用Python编写,并且我具有Windows API和WMI访问权限,但如果必须编写C函数的Python封装器,我也会这样做。
据我所知,Windows任务栏API更适用于像向现有图标添加菜单或进度条之类的操作,我找不到访问我正在寻找的信息的方法。我错了吗?
谢谢!

我认为它只使用顶层可见窗口。 - Luke
1
@Luke 不是的。它是顶层、可见、未拥有的窗口。 - David Heffernan
1个回答

6

有关任务栏中顶级窗口出现规则的文档在这里。总结如下:

每当应用程序创建一个非所有者窗口时,Shell会在任务栏上创建一个按钮。为确保窗口按钮放置在任务栏上,请使用WS_EX_APPWINDOW扩展样式创建一个非所有者窗口。要防止窗口按钮被放置在任务栏上,请使用WS_EX_TOOLWINDOW扩展样式创建非所有者窗口。或者,您可以创建一个隐藏的窗口,并将此隐藏的窗口作为可见窗口的所有者。

有关更多讨论,请参见Raymond Chen的文章


谢谢!这非常有帮助,看起来正是我在寻找的东西。我遇到了一些困难,无法从窗口句柄获取可执行文件的路径,但那是一个独立的问题... - jmite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接