2009-12-30 19 views
6

Sto osservando NSWorkspaceDidDeactivateApplicationNotification notification per ottenere l'applicazione che ha appena perso l'attenzione. Sto per finire con un'istanza di NSRunningApplication che ottieni dalla chiave del dizionario utente Info - NSWorkspaceApplicationKey - dell'oggetto di notifica.Ottenere la finestra principale di un'app tramite un'istanza NSRunningApplication

Stavo pensando che sarei in grado di ottenere la finestra principale dall'app dalla notifica, ma non sono sicuro di dove andare da qui dato che NSRunningApplication sembra essere piuttosto limitato. Qualsiasi aiuto sarebbe apprezzato.

BTW - Sto usando MacRuby ma la risposta non deve essere presente in MacRuby.

Grazie

risposta

4

Apple è sempre stata piuttosto bloccata su questo genere di cose. L'applicazione NSRunningApplication è stata appena introdotta in 10.6 e, come hai detto, è un po 'limitata. A seconda di ciò che si vuole fare, la risposta potrebbe essere nello Accessibility framework o potrebbe essere lo CGWindow API. È possibile utilizzare processIdentifier da NSRunningApplication per abbinarlo a tali API.

+0

Grazie, esaminerò entrambe le API. – alistairholt

2

E 'molto difficile ottenere la finestra principale di altre applicazioni; non sono nemmeno garantiti per essere Cocoa! Possono essere Carbon o Java, o Qt, o Mono ... Quindi non c'è modo di ottenere NSWindow di un'altra app, a meno che tu non faccia un hack. Puoi provare Accessibility API per ottenere le informazioni sulla finestra ecc. Di altre app indipendentemente dal framework utilizzato, ma non è così facile da usare.

+0

Grazie, esaminerò l'API di accessibilità. – alistairholt

1

A meno che l'applicazione opti per partecipare a IAC tramite il supporto AppleScript o altri mezzi, semplicemente non tocchi le sue finestre o qualsiasi altra cosa al di fuori del proprio spazio heap.

Problemi correlati