Ben*_*ard 6 cocoa accessibility
我想使用Accessibility API获取给定应用程序(外部)的所有窗口的列表.
目标是检查某个窗口是否打开.首先,我检查应用程序是否正在运行(使用[NSWorkspace runningApplications]并检查每个应用程序),然后我想检查为该应用程序打开的每个窗口的标题栏文本.
PS
所以我可以使用PID为app创建一个元素:
AXUIElementRef app = AXUIElementCreateApplication(pid);
Run Code Online (Sandbox Code Playgroud)
但我该怎么办呢?我是否朝着正确的方向前进?不能相信它很难找到这方面的例子.
Tho*_*ing 12
我不知道从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);
Run Code Online (Sandbox Code Playgroud)
您可以使用选项参数控制是否需要所有窗口(包括屏幕外...).
入口对象还包含更多信息. 文档链接
归档时间: |
|
查看次数: |
9183 次 |
最近记录: |