获取另一个应用程序窗口的唯一 ID

发布于 2024-07-09 00:08:14 字数 621 浏览 12 评论 0原文

我是一名新手 Cocoa 开发人员,正在开发我的第一个应用程序。 我想从任何应用程序的任何窗口读取唯一标识符 - 无论是 Cocoa 还是 Carbon。 Cocoa 应用程序使 AppleScript 可以使用它们的窗口 ID(尽管我确信有更好的方法可以通过适当的 Objective C 路径来实现此目的),但我正在尝试从 Adob​​e 应用程序中的文档访问窗口 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海未深 2024-07-16 00:08:14

函数 HIWindowGetCGWindowID() 只能返回应用程序窗口之一的 CGWindowID,因为来自其他程序的 WindowRef 在你的。

CGWindow.h 中的函数 CGWindowListCopyWindowInfo() 将返回一组字典,每个字典对应与您设置的条件匹配的窗口,包括其他应用程序中的窗口。 它只允许您按给定窗口上方的窗口、给定窗口下方的窗口和“屏幕上”窗口进行过滤,但返回的字典包含所属应用程序的进程 ID,您可以使用该进程 ID 将窗口与应用程序进行匹配。 在每个返回的字典中,kCGWindowNumber 键将指向作为 CFNumber 的窗口 ID。 还有一个 CGWindowListCreate() 函数,仅返回 CGWindowID 数组。 除了 CGWindow.h 标头和 Grab 之子示例代码。 而且,它只有10.5。

The function HIWindowGetCGWindowID() can only return a CGWindowID for one of your app's windows, since a WindowRef 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 the kCGWindowNumber key will point to the window ID as a CFNumber. There is also a CGWindowListCreate() function that only returns an array of CGWindowIDs. 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文