2008-11-23 148 views
3

我是一名新手Cocoa开发人员,我正在开发我的第一个应用程序。我想从任何应用程序的任何窗口读取唯一标识符 - 无论是Cocoa还是Carbon。 Cocoa应用程序使他们的窗口ID可供AppleScript使用(尽管我确定有更好的方法通过适当的Objective C路径来完成此操作),但我试图从Adobe应用程序中的文档访问窗口ID。这似乎是一个棘手的问题。我在参考库中看到的所有内容都是HIWindowGetCGWindowID获取另一个应用程序窗口的唯一ID

“该函数返回创建窗口时由窗口服务器分配的窗口ID。窗口ID通常不用于任何其他Carbon函数,但可以与需要窗口ID的其他Mac OS X函数一起使用,例如OpenGL中的函数。“

这可以用来从我的程序中获取ID吗?或者它只是一个可以在一个应用程序中使用的函数?

如果有人能指引我正确的方向,我会永远感激。

+0

你想用你收到的窗口ID做什么? – 2008-11-23 00:48:07

+0

我正在做一个时间跟踪应用程序,我想获得活动的文档路径。抓取活动窗口的窗口ID意味着我可以跟踪未保存文档的时间,这意味着我在文件被删除或重命名时拥有唯一的ID。 – 2008-11-24 13:26:01

回答

10

函数HIWindowGetCGWindowID()只能为您的某个应用程序的窗口返回一个CGWindowID,因为来自其他程序的WindowRef在您的程序中无效。

CGWindow.h中的函数CGWindowListCopyWindowInfo()将返回一个字典数组,每个窗口对应于您设置的条件(包括其他应用程序中的条件)。它只允许您通过给定窗口上方的窗口,给定窗口下方的窗口和“屏幕上”窗口进行过滤,但返回的字典包含拥有应用程序的进程ID,您可以使用该进程ID将窗口与应用程序进行匹配。在每个返回的字典中,kCGWindowNumber键将指向窗口ID作为CFNumber。还有一个CGWindowListCreate()函数,它只返回一个CGWindowID数组。除了CGWindow.h头文件和'Son of Grab'示例代码之外,基本上没有这些函数的文档。另外,它只有10.5。