gpt4 book ai didi

cocoa - Mac/Cocoa - 使用 Accessibility API 获取窗口列表

转载 作者:行者123 更新时间:2023-12-03 16:07:04 28 4
gpt4 key购买 nike

我想使用辅助功能 API 获取给定应用程序(外部)的所有窗口的列表。

目标是检查某个窗口是否打开。首先,我检查应用程序是否正在运行(使用 [NSWorkspace runningApplications] 并检查每个应用程序),然后我想检查为该应用程序打开的每个窗口的标题栏文本。

附注

所以我可以使用 PID 为应用程序创建一个元素:

AXUIElementRef app = AXUIElementCreateApplication(pid);

但是我该怎么办呢?我的方向正确吗?不敢相信很难找到这方面的例子。

最佳答案

我不知道如何从 Accessibility API 获取窗口 ID 和 PID。
Laurent 提到的 NSWindow 方法仅提供窗口 ID,但不提供窗口所属应用程序的 PID。
我将使用 10.5 以来可用的 CGWindowList 方法。
要获取窗口 ID 列表和所有者的 PID,您可以尝试以下操作:

CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
for (NSMutableDictionary* entry in (NSArray*)windowList)
{
NSString* ownerName = [entry objectForKey:(id)kCGWindowOwnerName];
NSInteger ownerPID = [[entry objectForKey:(id)kCGWindowOwnerPID] integerValue];
NSLog(@"%@:%d", ownerName, ownerPID);
}
CFRelease(windowList);

您可以使用选项参数控制是否需要所有窗口(包括屏幕外,...)。
条目对象还包含更多信息。 Documentation link

关于cocoa - Mac/Cocoa - 使用 Accessibility API 获取窗口列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2107657/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com