2012-12-07 16 views
5

Desidero ottenere l'elenco delle finestre per un'applicazione in esecuzione. È possibile ottenere l'elenco delle applicazioni in esecuzione da [[NSWorkspace sharedWorkspace] runningApplications], ma l'elenco delle finestre è disponibile solo su NSApplication. C'è un modo per convertire da NSRunningApplication a NSApplication, o un modo per ottenere l'elenco delle finestre più direttamente?come ottenere windows di NSRunningApplication

+0

Ecco la stessa domanda, già risposta: http://stackoverflow.com/questions/2107657/mac-cocoa-getting-a-list-of-windows-using-accessibility-api –

+0

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

+0

L'elenco delle vedove significa più direttamente? –

risposta

6

È necessario guardare la chiamata CoreGraphics CGWindowListCopyWindowInfo.

si chiamano in questo modo

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

e poi iterare la gamma di informazioni finestra, trovare quelli che sono dalla domanda che ti interessa e fare quello che vuoi con esso.

+3

Hey Ken! Questa è una buona risposta/suggerimento, ma non dice ancora come ottenere 'CG/NSWindow' ;-)' NSRunningApplication' non fornisce il numero di finestre/finestre e sto andando in crash (probabilmente facendo qualcosa di sbagliato) quando provo per ottenere 'NS/CGWindow' con il mio' CGWindowID' ottenuto con 'CGWindowListCopyWindowInfo' –

+1

Questo perché non è possibile creare una NSWindow per un'altra applicazione. Per quanto riguarda il recupero delle finestre per un'applicazione specifica, è possibile esaminare e confrontare il valore della chiave 'kCGWindowOwnerPID' alla proprietà' processIdentifier' di 'NSRunningApplication'. – mattsven