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
risposta
È 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.
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' –
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
Ecco la stessa domanda, già risposta: http://stackoverflow.com/questions/2107657/mac-cocoa-getting-a-list-of-windows-using-accessibility-api –
Anche qui http: // stackoverflow.com/questions/13759688/how-to-find-out-if-an-instance-of-my-app-is-already-running-or-not/13759928#13759928 –
L'elenco delle vedove significa più direttamente? –