【问题标题】:What is the value of kCGWindowName?kCGWindowName 的值是多少?
【发布时间】:2012-12-02 20:14:53
【问题描述】:

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

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

如何获取kCGWindowName 的值?

尝试在头文件中搜索 kCGWindowName 没有得到可用的结果。

【问题讨论】:

    标签: cocoa quartz-graphics


    【解决方案1】:

    这样的……

    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);
    

    【讨论】:

    • 好的,这就是你想要的。好吧,我也找不到它,但我猜了一下。我在代码中用 CFSTR("kCGWindowName") 替换了 kCGWindowName 并且它起作用了。所以这就是它的意思!它必须像这样定义... const kCGWindowName = "kCGWindowName"。我希望这会有所帮助。
    • 如此简单!我应该猜到的。接下来是如何构造 CFString。不幸的是,CFSTR 是宏的,因此不能通过 ffi 获得。但我想我可以在某个头文件中找到 CFSTR。
    • 最简单的解决方案原来是CFStringCreateWithCString
    猜你喜欢
    • 1970-01-01
    • 2011-01-24
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2012-03-06
    • 2017-11-13
    相关资源
    最近更新 更多