2012-12-07 10 views
5

Ich möchte die Fensterliste für eine laufende Anwendung erhalten. Ich kann die laufende Anwendungsliste von [[NSWorkspace sharedWorkspace] runningApplications] erhalten, aber die Fensterliste ist nur unter NSApplication verfügbar. Gibt es eine Möglichkeit, von NSRunningApplication zu NSApplication zu konvertieren, oder eine Möglichkeit, die Fensterliste direkter zu bekommen?Wie bekomme ich Fenster von NSRunningApplication

+0

Hier ist die gleiche Frage, bereits beantwortet: http://stackoverflow.com/questions/2107657/mac-cocoa-getting-a-list-of-windows-using-accessibility-api –

+0

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

+0

Witwe Liste direkter bedeutet? –

Antwort

6

Sie müssen sich den CoreGraphics-Aufruf CGWindowListCopyWindowInfo ansehen.

Sie nennen es wie dieses

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

und dann über die Anordnung der Fenster Informationen iterieren, finden Sie diejenigen, die sich aus der Anwendung sind Sie interessiert sind, und tun, was man will.

+3

Hey Ken! Das ist eine gute Antwort/Hinweis, aber es sagt immer noch nicht, wie man das 'CG/NSWindow' bekommt ;-)' NSRunningApplication' bietet keine Windows/Fenster-Nummer und ich stürze (wahrscheinlich mache ich etwas falsch) beim Versuch um das 'NS/CGWindow' mit meiner' CGWindowID' zu erhalten, die mit 'CGWindowListCopyWindowInfo' erhalten wurde –

+1

Das liegt daran, dass Sie kein NSWindow für eine andere Anwendung erstellen können. Was das Abrufen der Fenster für eine bestimmte Anwendung betrifft, können Sie den Wert des Schlüssels 'kCGWindowOwnerPID' mit der' processIdentifier'-Eigenschaft von 'NSRunningApplication' vergleichen. – mattsven