使用Windows API或WMI判断进程是否在任务栏显示
我正在写一个类似于任务栏的应用程序。我的目标很简单,就是显示正在运行的程序列表。
我找到很多方法可以列出所有正在运行的进程,但经过几个小时的搜索,我还是找不到一个方法来确定哪些进程应该显示在任务栏上。
举个例子,Windows任务管理器有两个标签,一个是“应用程序”,另一个是“进程”。“进程”标签下包含了所有系统进程,而“应用程序”标签下则列出了电脑上正在运行的“应用”。我希望在我的程序中能够访问到“应用程序”的列表,而不是“进程”的列表,这样在我的伪任务栏中就不会显示像taskhost.exe、winlogon.exe这样的东西。
理想情况下,我希望能获取到任务栏上显示的程序的确切列表。我的程序是用Python写的,我可以使用Windows API和WMI,但如果需要为C语言的函数写Python的封装,我也会去做。
据我了解,Windows任务栏API主要是用来给现有图标添加菜单或进度条的,我找不到获取我想要的信息的方法。我是不是搞错了?
谢谢!
1 个回答
6
关于哪些顶级窗口会出现在任务栏上的规则,可以在这里找到详细说明。简单来说:
当一个应用程序创建一个没有拥有者的窗口时,系统会在任务栏上创建一个按钮。为了确保这个窗口的按钮出现在任务栏上,你需要创建一个没有拥有者的窗口,并使用WS_EX_APPWINDOW这个扩展样式。如果你想让这个窗口的按钮不出现在任务栏上,就要使用WS_EX_TOOLWINDOW这个扩展样式来创建没有拥有者的窗口。另外,你也可以创建一个隐藏的窗口,并让这个隐藏的窗口成为你可见窗口的拥有者。
想了解更多,可以看看Raymond Chen的文章。