【问题标题】:Check if a process is a windowed process in OSX检查进程是否是 OSX 中的窗口进程
【发布时间】:2012-08-31 15:11:05
【问题描述】:

给定一个进程的 PID,我如何检查它是否是一个窗口进程?我正在寻找 OSX 上的解决方案。

需要 Objective-C/C 解决方案。 我在 OSX Mountain Lion 上。

我将窗口化进程定义为在活动监视器中选择“窗口化进程”选项卡时可以看到的进程。 http://cl.ly/FeXR

【问题讨论】:

  • This answer 解释了原始 win32 中的一个进程,您可以在其中检查每个正在运行的窗口以查看它是否属于您想要的进程。也许这有帮助?
  • @chris 谢谢,但我正在为 OSX 在 Objective-C 或 C 中寻找解决方案。
  • 无论出于什么原因,尽管您多次提到 OSX,但它从未在我的大脑中注册过。道歉。也许 OSX 也有类似的方法。
  • @shellter 你不能是认真的吗?你有没有花时间阅读另一个问题?该问题询问在 Activity Monitor 中具有图标的应用程序的定义特征有哪些共同点。这个问题询问如何检查一个进程是否是一个窗口进程。

标签: objective-c c macos cocoa unix


【解决方案1】:
[NSWorkspace runningApplications] 

这会将NSArray 中的所有用户应用程序作为NSRunningApplication 的实例返回,该NSRunningApplication 具有属性processIdentifier

或者你可以直接使用runningApplicationWithProcessIdentifier:来获取指定PID的应用。

这里是示例代码:http://developer.apple.com/library/Mac/#samplecode/AppList/Introduction/Intro.html

通过NSRunningApplicationactivationPolicy 属性,您可以获得窗口状态。我修改了AppList 代码,使其仅显示窗口应用程序,如下所示。这与活动监视器显示的内容相匹配。

特别是,您正在寻找NSApplicationActivationPolicyRegular

但是请注意这些限制。这仅适用于用户拥有的进程。

所有其他方法均已弃用,将来可能无法使用。不再推荐使用 GetBSDProcessList 和 Carbon 的 GetProcessInformation 之类的方法。

【讨论】:

  • 我不明白这如何回答我的问题。您只是提供了一种检索所有用户拥有的进程的方法;唯一提到检查进程是否窗口化并不能以任何方式回答问题。
  • 您是否亲自尝试过代码并阅读了我指出的文档?无论如何,我已经更新了我的答案以反映如何做到这一点。
  • 编辑答案非常有帮助!它完美地工作。感谢您的帮助!
猜你喜欢
  • 2020-06-20
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多