我通过基于ffilib的FFI使用Quartz(即Quartz是动态加载的)。调用CGWindowListCopyWindowInfo将返回包含窗口信息的字典的CFArray。一个有趣的键是kCGWindowName,它可以用来获取窗口的名称。

在C中,将包括适当的头文件,但是由于我使用的是ffilib,因此我需要知道kCGWindowName的值。根据Apple的文档,它是CFStringRef

如何获取kCGWindowName的值?

尝试在头文件中对kCGWindowName进行grepping操作未得到可用结果。

最佳答案

像这样

CFArrayRef windowsInfo = CGWindowListCopyWindowInfo(listOptions, kCGNullWindowID);

for (CFIndex idx=0; idx<CFArrayGetCount(windowsInfo); idx++) {
    CFDictionaryRef dict = CFArrayGetValueAtIndex(windowsInfo, idx);
    CFStringRef windowName = CFDictionaryGetValue(dict, kCGWindowName);
    NSString* nsWindowName = (NSString*)windowName;
}

CFRelease(windowsInfo);

10-02 10:21