【发布时间】:2020-10-26 23:42:43
【问题描述】:
我想知道是否可以使用 python 列出所有在 Windows 上运行的 GUI 应用程序。
我一直在做一些研究,人们推荐使用psutil,看起来还可以,但是,它列出了所有活动的进程,我没有能够找到有关如何仅保留与活动的 GUI 应用程序(例如,Firefox、Chrome、Skype、Discord 等)关联的进程的任何资源。
有没有办法做到这一点?也许不使用 Python(尽管那会很棒),也许通过一些 C++?获取进程的PID就足够了。
编辑:感谢 chrisbyte 和 Vijaye Raji,win32gui 和 EnumWindows 正是我想要的。
【问题讨论】:
-
win32gui可能会有所帮助 (pip install pywin32)。这里有一个示例来枚举活动窗口并获取完整标题superuser.com/a/677023,尽管标题是完整标题而不是应用程序名称本身。 -
系统中没有任何东西可以让您区分不会显示 GUI 的进程和会显示 GUI 的进程。
-
有很多方法可以定义一个 GUI 进程:当前显示一个或多个窗口的进程,具有至少一个 GUI 线程(即,具有消息队列的线程)的进程,其可执行文件的进程图像在可选的 COFF 图像头的子系统字段中具有 IMAGE_SUBSYSTEM_WINDOWS_GUI、没有附加控制台的进程等。如果您的程序具有足够的权限,则可以检测到其中的大部分。但是@IInspectable 是正确的,一些应用程序可以选择创建一个 GUI(可能连同一个控制台)。所以有些定义太模糊了。
标签: python windows process cpu psutil