2016-07-30 6 views
4

Ich möchte in der Lage sein, den gesamten Text aus dem vordersten Fenster auf meinem Bildschirm zu greifen, es zu einem URL-Parser zu leiten und zu wählen, welche URL aus dem geparsten Text geöffnet werden soll.Wie kann ich so allgemein wie möglich den gesamten Text aus dem vordersten Fenster/Dokument auf OSX holen?

Um dies zu tun, würde ich eine Möglichkeit benötigen, auf alle textuellen Inhalte des vordersten Fensters zuzugreifen. Ich bin in der Nähe von applescript gekommen, aber ich finde keinen Weg, um den eigentlichen Text zu bekommen. Ich vermute, dass schnell könnte helfen können, aber ich bin verloren, wie man dies sogar googeln, da die meisten meiner Suchen am Ende nur triviale Ansätze wie das Abrufen der URL von einem Tab in Chrom usw. finden.

das ist der Kern dessen, was ich will:

tell the frontmost application 
    get contents of frontmost window as text 
end tell 
+1

Schleife "Ich kann einen Weg finden, um den eigentlichen Text zu finden" Ich frage mich, über welchen Text Sie sprechen. Apps können sehr unterschiedliche Möglichkeiten haben, Text anzuzeigen. Und wenn sie es nicht absichtlich aussetzen, gibt es keine Möglichkeit, es von Ihrer eigenen App zu bekommen. – Moritz

+0

Ich denke, das ist, was ich befürchtet habe. Meine Hoffnung war, dass, da die Voice-Over-Funktion bei den meisten Apps funktioniert, auch eine Möglichkeit für mich besteht, den Voice-Over-Text zu verwenden. – brujoand

+0

Nun, ich hätte sagen sollen "Es gibt keine Möglichkeit *, an die ich jetzt denken kann *" ... vielleicht wird uns jemand überraschen. Außerdem ist Ihr Kommentar interessant: Vielleicht können Sie Accessibility verwenden, um etwas ungeschützten Text zu erhalten, wie es bei Voice Over der Fall ist? Ich weiß es eigentlich nicht. – Moritz

Antwort

1

Haben Sie versucht, alle UI-Elemente der jeweiligen Anwendung zu bekommen?

set appname to "System Preferences" -------------------------- Set this to the App you want to look at 

display dialog "Set the app you want to look at" default answer "System Preferences" buttons {"OK"} default button 1 
set appname to text returned of result 

set winstuff to "defaultval" 
set menustuff to "defaultval" 

tell application appname 
    activate 
end tell 

delay 0.5 

tell application "System Events" 
    tell process appname 
     set winstuff to entire contents of front window 
     set menustuff to entire contents of menu bar 1 
    end tell 
end tell 
--return winstuff & "\r\r\r\r" & menustuff -- comment this out to get just winstuff 
return winstuff -- comment this out too to get just menustuff 
--return menustuff 
+0

Danke, ich habe es versucht. Aber es ist nicht vorhersehbar, für welche Anwendungen das funktioniert und leider nicht. – brujoand

0

Eine Lösung für JXA:

//Example get all text from "ScreenFlow" 
var sProc = "ScreenFlow" 
var system = Application('System Events') 
var elements = system.processes[sProc].windows[0].entireContents() 
var s = "" 
for (var i=0;i<elements.length;i++){ 
    s = s + elements[i].name() + "," 
} 
s = s.replace(/null,/g,"") 

//Return s 
console.log(s) 

Es gibt wahrscheinlich andere Element Kinder Sie obwohl diese Liste weitere Informationen dicht machen, hinzufügen können. Ein Beispiel von meinem Video-Editor ausgegeben:

"Video,+ Action,Color:,Offset:,Blur Size,Shadow,Opacity,Scale:,Z Rotation:,Reflection,Y Rotation:,Opacity:,Cropping,X Rotation:,Position:,Color Controls,Corner Round:,Video Filters,Duration: 1 min 0 secs,UI Mass Email App,UI Mass Email App," 

Beachten Sie, dass dies Menütext nicht greifen. Dazu müssen Sie durch system.processes[sProc].menuBars

Verwandte Themen