获取另一个应用程序窗口的唯一 ID
我是一名新手 Cocoa 开发人员,正在开发我的第一个应用程序。 我想从任何应用程序的任何窗口读取唯一标识符 - 无论是 Cocoa 还是 Carbon。 Cocoa 应用程序使 AppleScript 可以使用它们的窗口 ID(尽管我确信有更好的方法可以通过适当的 Objective C 路径来实现此目的),但我正在尝试从 Adobe 应用程序中的文档访问窗口 ID。 这似乎要棘手得多。 我似乎在参考库中找到的是 HIWindowGetCGWindowID:
"此函数返回创建窗口时窗口服务器分配的窗口 ID。该窗口 ID 通常不适用于任何其他 Carbon 函数,但可以与其他 Mac 一起使用需要窗口 ID 的 OS X 函数,例如 OpenGL 中的函数。”
这可以用来从我的程序中获取 ID 吗? 或者它只是一个可以在一个应用程序中使用的功能?
如果有人能指出我正确的方向,我将永远感激不已。
I'm a newbie Cocoa developer and I'm developing my first application. I want to read a unique identifier from any window of any application - whether it's Cocoa or Carbon. Cocoa applications make their window IDs available to AppleScript (although I'm sure there's a much better way to do this through a proper Objective C route), but I'm trying to access window IDs from documents in the Adobe apps. This seems to be a lot trickier. All I can seem to find in the reference libraries is HIWindowGetCGWindowID:
"This function returns the window ID assigned by the window server when a window is created. The window ID is not generally useful with any other Carbon function, but may be used with other Mac OS X functions that require a window ID, such as functions in OpenGL."
Can this be used to get the ID from my program? Or is it just a function that can be used within one application?
If someone could point me in the right direction, I'd be eternally grateful.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
函数
HIWindowGetCGWindowID()
只能返回应用程序窗口之一的CGWindowID
,因为来自其他程序的WindowRef
在你的。CGWindow.h 中的函数
CGWindowListCopyWindowInfo()
将返回一组字典,每个字典对应与您设置的条件匹配的窗口,包括其他应用程序中的窗口。 它只允许您按给定窗口上方的窗口、给定窗口下方的窗口和“屏幕上”窗口进行过滤,但返回的字典包含所属应用程序的进程 ID,您可以使用该进程 ID 将窗口与应用程序进行匹配。 在每个返回的字典中,kCGWindowNumber
键将指向作为CFNumber
的窗口 ID。 还有一个 CGWindowListCreate() 函数,仅返回 CGWindowID 数组。 除了 CGWindow.h 标头和 Grab 之子示例代码。 而且,它只有10.5。The function
HIWindowGetCGWindowID()
can only return aCGWindowID
for one of your app's windows, since aWindowRef
from another program won't be valid in yours.The function
CGWindowListCopyWindowInfo()
from CGWindow.h will return an array of dictionaries, one for each window that matches the criteria you set, including ones in other applications. It only lets you filter by windows above a given window, windows below a given window and "onscreen" windows, but the dictionary returned includes a process ID for the owning app which you can use to match up window to app. In each returned dictionary thekCGWindowNumber
key will point to the window ID as aCFNumber
. There is also aCGWindowListCreate()
function that only returns an array ofCGWindowID
s. There is basically no documentation for these functions beyond the CGWindow.h header and the Son of Grab sample code. Also, it's 10.5 only.