我是新手Cocoa开发人员,我正在开发我的第一个应用程序。我想从任何应用程序的任何窗口读取一个唯一的标识符 - 无论是Cocoa还是Carbon。 Cocoa应用程序使他们的窗口ID可用于AppleScript(尽管我确信通过正确的Objective C路径有更好的方法),但我正在尝试从Adobe应用程序中的文档访问窗口ID。这似乎更棘手。我在参考库中似乎找到的只有HIWindowGetCGWindowID:
“此函数返回窗口服务器在创建窗口时分配的窗口ID。窗口ID通常不适用于任何其他Carbon函数,但可以与需要窗口ID的其他Mac OS X函数一起使用,比如OpenGL中的函数。“
这可以用来从我的程序中获取ID吗?或者它只是一个可以在一个应用程序中使用的函数?
如果有人能指出我正确的方向,我会永远感激。
答案 0 :(得分:10)
函数HIWindowGetCGWindowID()
只能为您的某个应用程序窗口返回CGWindowID
,因为来自其他程序的WindowRef
将无效。
来自 CGWindow.h 的函数CGWindowListCopyWindowInfo()
将返回一个字典数组,每个窗口对应一个与您设置的条件匹配的字典,包括其他应用程序中的条件。它只允许您通过给定窗口上方的窗口,给定窗口下方的窗口和“屏幕”窗口进行过滤,但返回的字典包含拥有应用程序的进程ID,您可以使用该进程ID将窗口与应用程序进行匹配。在每个返回的字典中,kCGWindowNumber
键将窗口ID指向CFNumber
。还有一个CGWindowListCreate()
函数只返回CGWindowID
的数组。除了 CGWindow.h 标题和Son of Grab示例代码之外,基本上没有这些函数的文档。此外,它只有10.5。