L'intestazione CGSPrivate.h che gira intorno non è direttamente compatibile con OS X 10.8 in quanto CGSGetWindowProperty() non esiste più (beh, lo fa, ma non è più possibile collegarsi ad esso). Quindi aggiungere queste due righe al file CGSPrivate.h - sono andato avanti e capito questo io stesso dopo molte ore alla ricerca di Google - per farlo funzionare:
extern CGSConnection CGSDefaultConnectionForThread(void);
extern CGError CGSCopyWindowProperty(const CGSConnection cid, NSInteger wid, CFStringRef key, CFStringRef *output);
Adattare il codice di Outis, ecco un modo di scorrere attraverso il titolo di ogni finestra. Ho testato questo con clangore 4.2 su Mountain Lion:
CFStringRef titleValue;
CGSConnection connection = CGSDefaultConnectionForThread();
NSInteger windowCount, *windows;
NSCountWindows(&windowCount);
windows = (NSInteger*) malloc(windowCount * sizeof(NSInteger));
if (windows) {
NSWindowList(windowCount, windows);
for (int i = 0; i < windowCount; ++i)
{
CGSCopyWindowProperty(connection, windows[i], CFSTR("kCGSWindowTitle"), &titleValue);
if(!titleValue) //Not every window has a title
continue;
//Do something with titleValue here
}
free(windows);
}
alcune altre cose ho scoperto che include quanto segue:
- Nessun titolo della finestra supera 127 byte.
- titoli della finestra sono codificati con kCFStringEncodingMacRoman
Quindi, se si vuole come un C-string, scrivere qualcosa di simile:
char *cTitle[127] = {0};
CFStringGetCString(titleValue,cTitle,127,kCFStringEncodingMacRoman);
Personalmente, mi consiglia di farlo in questo modo in quanto l'API di accessibilità è un dolore totale e richiede autorizzazioni extra.
Spero che questo aiuti qualcuno! Saluti!
fonte
2013-03-06 01:28:18
Nota che AppleScript sta utilizzando le interfacce di accessibilità, che sono pubbliche e hanno equivalenti C (vedi http://developer.apple.com/mac/library/documentation/Accessibility/Reference/AccessibilityLowlevel/). Le API CGS * non solo non sono documentate, possono cambiare in qualsiasi momento. (Quindi, usali solo se sei disposto a testare in anticipo e spesso su nuove versioni del SO e non hai altra scelta.) –
Hai un esempio di utilizzo per l'API di accessibilità? Speravo di includerlo, ma non ho abbastanza familiarità con esso per fornire come usarlo. – outis
Inoltre, richiede che l'accessibilità sia abilitata. – outis