2013-11-14 9 views
12

Ich habe eine Statusmenü-App, die mit einer systemweiten Verknüpfung gestartet werden kann. Wenn die App aktiv wird, wäre es großartig, wenn ich den Text, der in der aktuell laufenden Anwendung ausgewählt ist, irgendwie bekommen könnte.Aktuell ausgewählten Text in aktiver Anwendung in Cocoa

Also zum Beispiel tippe ich etwas in meinen Texteditor, wähle den Text aus, klicke auf meine globale Verknüpfung, meine App erscheint und ich würde nun gerne den ausgewählten Text aus dem Texteditor kennen.

Was ich habe, so weit ist der folgende (angenommen Code von How to get global screen coordinates of currently selected text via Accessibility APIs.)

AXUIElementRef systemWideElement = AXUIElementCreateSystemWide(); 
AXUIElementRef focussedElement = NULL; 
AXError error = AXUIElementCopyAttributeValue(systemWideElement, kAXFocusedUIElementAttribute, (CFTypeRef *)&focussedElement); 
if (error != kAXErrorSuccess) { 
    NSLog(@"Could not get focussed element"); 
} else { 
    AXValueRef selectedTextValue = NULL; 
    AXError getSelectedTextError = AXUIElementCopyAttributeValue(focussedElement, kAXSelectedTextAttribute, (CFTypeRef *)&selectedTextValue); 
    if (getSelectedTextError == kAXErrorSuccess) { 

     selectedText = (__bridge NSString *)(selectedTextValue); 
     NSLog(@"%@", selectedText); 
    } else { 
     NSLog(@"Could not get selected text"); 
    } 
} 
if (focussedElement != NULL) CFRelease(focussedElement); 
CFRelease(systemWideElement); 

Das Problem hier ist, dass es nicht mit Anwendungen wie Safari und E-Mail ...

Dank funktioniert

+0

Haben Sie dieses Problem schon gelöst? –

+0

Nee ... aber ich habe es am Ende nicht gebraucht ... wäre aber immer noch interessiert zu wissen, wie es im App-Store sicher und zuverlässig funktionieren würde ... – Georg

+0

Das selbe hier ... Würde auch gerne sehen ein nicht-Appstore speichern Weg ... –

Antwort

1

Dies ist technisch keine Lösung für Ihre genaue Frage, da der Benutzer dies aus dem Menü Dienste auslösen müsste, anstatt es einfach passiert, wenn sie Ihre Menüleiste App auslösen.

Sie könnten eine System Service verwenden. Sie erstellen einen Dienst für Ihre App, der den aktuell ausgewählten Text über eine Zwischenablage an Ihre Menüleisten-App sendet.

Verwandte Themen