如何判断一个进程是否有GUI?

How to determine if a process has GUI or not?

如何确定进程是否具有响应式 GUI 或者它是后台应用程序?可能有一些 API 函数调用是必须进行的?

(答案不一定要涉及 API 个调用)

最接近的 Windows API 推断此信息的调用是 GetGUIThreadInfo。请注意 备注 部分中的以下段落:

If the specified thread does not exist or have an input queue, the function will fail.

具有输入队列的线程可能拥有 windows。请注意,创建 windows 不需要具有输入队列的线程。另请注意,非 GUI 线程可以随时传播到 GUI 线程。


注意:即使可执行映像指定了 subsystem,但它们 运行(例如 CONSOLEWINDOWS ),这不能用于区分具有 GUI 的进程和 'background process'。 CONSOLE 子系统中的进程 运行ning 也可以创建 GUI。