2012-08-06 69 views
1

如果我得到一個CGWindowID(_windowID)如下...如何檢查CGWindowID仍然有效

NSArray *windowList = (__bridge NSArray *)CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID); 
for (NSDictionary *info in windowList) { 
    if ([[info objectForKey:(NSString *)kCGWindowOwnerName] isEqualToString:@"window name"] && ![[info objectForKey:(NSString *)kCGWindowName] isEqualToString:@""]) { 
     _windowID = [[info objectForKey:(NSString *)kCGWindowNumber] unsignedIntValue]; 
    } 
} 

如何正確測試窗口ID仍然有效和窗口尚未關閉?我只是運行類似的代碼,只是檢查窗口ID存在?

在此先感謝

回答

0

的說明文件kCGWindowListOptionOnScreenOnly恆說:

列出當前屏幕上的所有窗口。 Windows從前到後以 的順序返回。使用此選項檢索列表時,應將relativeToWindow參數設置爲kCGNullWindowID。

所以窗戶肯定會出現在屏幕上,因爲在撥打CGWindowListCopyWindowInfo和您的操作之間似乎沒有任何事情發生。

也許你想測試,以確保他們沒有隱藏或最小化?

+0

我捕獲的問題窗口無法隱藏或最小化。我真的只是在檢查後,如果窗口已經關閉,我得到了窗口ID。 – Equinox2000 2012-08-06 21:15:07

+0

如果一個窗口關閉了,當傳遞'kCGWindowListOptionAll'(即屏幕和屏幕外)參數時,它甚至可能不會出現在'CGWindowListCopyWindowInfo'生成的窗口列表中。 – 2012-08-06 21:18:26

+0

事實上,我只是想知道是否有一個更快的方法,而不僅僅是獲取窗口ID的列表,並看看窗口是否仍然在列表中。作爲一個黑客,因爲我是屏幕捕獲窗口,我檢查是否窗口大小是1x1,如果是這樣假設它已關閉。 – Equinox2000 2012-08-06 21:24:48