Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 获取已打开窗口的列表_Cocoa_Macos - Fatal编程技术网

Cocoa 获取已打开窗口的列表

Cocoa 获取已打开窗口的列表,cocoa,macos,Cocoa,Macos,我是Cocoa的新手,我想知道如何获得所有打开窗口的列表。我不是说运行程序,因为这将是一项简单的任务。我想列出窗口,例如,如果我在打开10个pdf的情况下运行预览,我的程序应该能够检索所有这些pdf的列表。 我还想知道是否有一些API可用于从外部应用程序与已经打开的窗口交互(可能移动它们或执行其他操作)。 谢谢。首先,Cocoa不是首字母缩略词,所以它不是“Cocoa”。-) 其次,您唯一的(公共API)选项是可访问性API。您必须在“系统首选项”的“辅助功能”面板中启用辅助设备的访问权限 请查

我是Cocoa的新手,我想知道如何获得所有打开窗口的列表。我不是说运行程序,因为这将是一项简单的任务。我想列出窗口,例如,如果我在打开10个pdf的情况下运行预览,我的程序应该能够检索所有这些pdf的列表。 我还想知道是否有一些API可用于从外部应用程序与已经打开的窗口交互(可能移动它们或执行其他操作)。
谢谢。

首先,Cocoa不是首字母缩略词,所以它不是“Cocoa”。-)

其次,您唯一的(公共API)选项是可访问性API。您必须在“系统首选项”的“辅助功能”面板中启用辅助设备的访问权限

请查看要开始的文档:

我有10个pdf打开预览运行,我的程序应该能够检索所有这些pdf列表

嗯,这是最难的部分。您可以通过辅助功能获取窗口,但辅助功能不会将它们与任何类型的文档对象相关联

AppleScript适用于某些应用程序,但预览不是其中之一。事实上,大多数应用程序并非如此


因此,您可以很容易地获取窗口列表,但是从这些窗口中获取有意义的信息可能会很棘手,也可能是不可能的。您的最佳选择可能是可访问性、AppleScript和不可编写脚本的应用程序的错误报告,以及您的应用程序无法处理所有问题的知识的组合。

如果您需要窗口列表或特定于UI的窗口控制, 如果是特定于用户界面的控件,您可以参考苹果的示例,

它显示在桌面上运行的Windows列表,可能您可以按您的需要调整。p> 您可以使用
CGWindowListCopyWindowInfo
检索当前用户会话中的窗口列表


这是一个Carbon函数,虽然不是Cocoa,但完全可以从Cocoa应用程序调用,并记录在这里:。

将其更改为“Cocoa”:-)我将查看可访问性API,我希望能找到我需要的一切。谢谢。如果你是可可新手,这不是你的话题。这很难,解决方案不会涉及太多可可粉…是的,我知道,但我希望能够解决这个问题。当然,我同时也在学习可可,而且我对计算机编程并不陌生,所以我认为可可对我来说不是个问题。问题是我想做的事情很难,因为我已经写下了原因。所以思考比我想象的更难。。。但是,如果我能得到窗口标题,我就可以得到文件名,但这并不明显,也没有任何用处;而且,因为用户可能打开了多个同名文件,您无法知道哪个窗口标识哪个文件。@PeterHosey的提示AppleScript肯定不是最漂亮的,但却是我发现的最简单、最直接的。这是我在Cocoa应用程序中使用的:
告诉应用程序(最前面的应用程序的路径为Unicode文本)获取(文档1的路径)
获取当前文档当然,您可以循环浏览所有文档、窗口、应用程序(?)等。