2016-07-30 1 views
4

Je veux être en mesure de saisir tout le texte de la fenêtre active sur mon écran, la pipe à un analyseur url et choisir URL pour ouvrir du texte analysé.Comment puis-je récupérer de manière aussi générique que possible tout le texte de la fenêtre/du document le plus en avant sur OSX?

Pour ce faire, je aurait besoin d'un moyen d'accéder à tous les contenus textuels de la fenêtre active. Je me suis rapproché en utilisant applescript, mais je ne trouve pas un moyen d'obtenir le texte réel. Je soupçonne que swift pourrait être en mesure d'aider, mais je suis perdu sur la façon de google même, car la plupart de mes recherches finissent par trouver des approches triviales comme obtenir l'URL d'un onglet en chrome, etc.

Tel est le sens de ce que je veux:

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

'Je ne peux pas trouver un moyen d'obtenir la Text' réelle Je me demande ce texte que vous parlez. Les applications peuvent avoir des façons très différentes d'afficher du texte. Et s'ils ne l'exposent pas exprès, il n'y a aucun moyen de l'obtenir à partir de votre propre application. – Moritz

+0

Je suppose que c'est ce que je craignais. Mon espoir était que, puisque la voix off semble fonctionner sur la plupart des applications, il y aurait aussi un moyen pour moi d'obtenir le texte que la voix off utilise. – brujoand

+0

Eh bien, j'aurais dû dire "il n'y a pas moyen * que je puisse penser en ce moment *" ... peut-être que quelqu'un nous surprendra. De plus, votre commentaire est intéressant: peut-être pouvez-vous utiliser Accessibility pour récupérer du texte, comme le fait Voice Over? Je ne sais pas, en fait. – Moritz

Répondre

1

Avez-vous essayé d'obtenir tous les éléments de l'interface utilisateur de l'application spécifique?

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

Merci, j'ai essayé. Mais il est imprévisible pour quelles applications cela fonctionnera et pas malheureusement. – brujoand

0

Une solution pour 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) 

Il y a probablement d'autres enfants d'éléments que vous pouvez ajouter à rendre cette liste plus d'informations denses bien. Un exemple de sortie de mon éditeur vidéo:

"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," 

Notez que cela ne permet pas de saisir le texte du menu. Pour cela, vous devrez boucle à travers system.processes[sProc].menuBars