2012-12-07 27 views
5

Çalışan bir uygulama için pencere listesini almak istiyorum. Çalışan uygulama listesini [[NSWorkspace sharedWorkspace] runningApplications]'dan alabilirim, ancak pencere listesi yalnızca NSApplication'da kullanılabilir. NSRunningApplication'dan NSApplication'a dönüştürmenin bir yolu veya pencere listesini daha doğrudan almak için bir yol var mı? CGWindowListCopyWindowInfoCGWindowListCopyWindowInfo numaralı CoreGraphics ürününe göz atmanız gerekir.NSRunningApplication pencereleri nasıl edinilir

+0

İşte aynı soru, zaten yanıtladı: http://stackoverflow.com/questions/2107657/mac-cocoa-getting-a-list-of-windows-using-accessibility-api –

+0

Burada bile http: // stackoverflow.com/questions/13759688/how-to-find-out-if-an-instance-of-my-app-is-already-running-or-not/13759928#13759928 –

+0

Dul listesi daha doğrudan demektir? –

cevap

6

Bu

CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID); 

gibi diyoruz ve daha sonra, pencere bilgilerinin diziyi sürekli tekrarlanması ilgilendiğiniz uygulamadan olanlar bulmak ve onunla istediğinizi yapın.

+3

Hey Ken! Bu iyi bir cevap/ipucu, ama hala 'CG/NSWindow' ;-)' NSRunningApplication' pencere/pencere numarası sağlamaz ve ben (muhtemelen yanlış bir şey yapıyor) çökmesini nasıl çalıştığını anlatmıyor. CGWindowListCopyWindowInfo ' –

+1

ile elde edilen' CGWindowID 'ile NS/CGWindow' almak için başka bir uygulama için bir NSWindow oluşturamazsınız. Belirli bir uygulama için pencereleri aldığınız sürece, 'kCGWindowOwnerPID' anahtarının değerini 'NSRunningApplication'ın' processIdentifier' özelliğine göre inceleyebilir ve karşılaştırabilirsiniz. – mattsven