2012-12-02 49 views
1

我通過基於ffilib的FFI使用Quartz(即Quartz是動態加載的)。對CGWindowListCopyWindowInfo的調用返回包含窗口信息的字典CFArray。一個有趣的關鍵是kCGWindowName,它可以用來獲取窗口的名稱。kCGWindowName的值是什麼?

在C中將包括適當的頭文件,但由於我使用ffilib,我需要知道kCGWindowName的值。根據蘋果的文件,它是CFStringRef

如何獲得kCGWindowName的值?

在頭文件中嘗試刷新kCGWindowName時沒有提供可用的結果。

回答

2

事情是這樣的......

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

OK,這就是你想要的。好吧,我也找不到它,但我猜測。我用代碼中的CFSTR(「kCGWindowName」)替換了kCGWindowName,它工作正常。所以這就是它所代表的!它必須像這樣定義... const kCGWindowName =「kCGWindowName」。我希望有所幫助。 – regulus6633

+0

太簡單了!我應該猜到了。接下來是如何構建CFString。不幸的是,CFSTR是宏觀的,因此無法通過ffi。但我想我可以在某個頭文件中找到CFSTR。 – soegaard

+0

最簡單的解決方案是'CFStringCreateWithCString'。 – soegaard