2017-09-08 2 views
0

Ich schreibe ein einfaches Automator-Skript in Javascript.Ist es möglich, einen Schlüsselcode an eine Anwendung zu senden, die nicht vorne liegt?

Ich möchte einen Schlüsselcode (oder Key-Storke) an eine OS X-Anwendung senden, die nicht vorne ist.

Grundsätzlich möchte ich diesen Code ausführen und meine Sachen machen, während das Skript eine bestimmte Anwendung öffnet, schreibe Text und trete ein - alles ohne meine andere Arbeit zu stören.

Ich möchte etwas wie folgt aus: Application("System Events").processes['someApp'].windows[0].textFields[0].keyCode(76);

In Script Wörterbuch gibt es keyCode Verfahren unter Processes Suite. Der obige Code, wirft jedoch einen Fehler, der folgt: execution error: Error on line 16: Error: Named parameters must be passed as an object. (-2700)

Ich verstehe, dass der folgende Code funktioniert gut, aber es die Anwendung erfordert vor zu laufen: // KeyCode 76 => "Enter" Application("System Events").keyCode(76);

UPDATE: I versuche etwas über iTunes zu suchen (Apple Music). Ist dies möglich, ohne iTunes App im Voraus zu bringen?

+0

Der Schlüsselcode '_command_ der Systemereignisse wirkt nur auf den Fokus. – user3439894

+0

Aus meiner Erfahrung mit "Enter" glaube ich nicht, dass das der Fall ist. Die KeyCode-Methode verhält sich genauso wie die Keystroke-Methode mit dem "Enter" -Tastencode. Ein "Enter" wird zum Zeitpunkt des Aufrufs an die Front-Anwendung gesendet. – gnis

Antwort

1

Es ist möglich, Text in Anwendung zu schreiben, die mit Hilfe des GUI Scripting (Zugänglichkeit) nicht vor, aber:

  • Sie müssen wissen, welche Elemente der Benutzeroberfläche im Fenster sind Ihrer spezifischen Anwendung, und die Attribute und Eigenschaften des spezifischen Elements kennen.
  • Sie müssen Ihr Skript in der System Preferences --> Security & Privacy --> Accessibility hinzufügen.

Hier ist ein Beispielskript (getestet auf macOS Sierra) einen Text an der Position des Cursors im vorderen Dokument der „TextEdit“ Anwendung zu schreiben.

Application("System Events").processes['TextEdit'].windows[0].scrollAreas[0].textAreas[0].attributes["AXSelectedText"].value = "some text" + "\r" // r is the return KEY 

aktualisiert

Um einig Schlüsselcode auf eine Hintergrundanwendung zu senden, können Sie die CGEventPostToPid() Methode der Carbon- Rahmen verwenden.

Hier ist das Skript einen Text in iTunes suchen (funktioniert auf meinem Computer, macOS Sierra und iTunes Version 10.6.2).

ObjC.import('Carbon') 
iPid = Application("System Events").processes['iTunes'].unixId() 
searchField = Application("System Events").processes['iTunes'].windows[0].textFields[0] 
searchField.buttons[0].actions['AXPress'].perform() 
delay(0.1) // increase it, if no search 
searchField.focused = true 
delay(0.3) // increase it, if no search 
searchField.value = "world" // the searching text 
searchField.actions["AXConfirm"].perform() 
delay(0.1) // increase it, if no search 

// ** carbon methods to send the enter key to a background application *** 
enterDown = $.CGEventCreateKeyboardEvent($(), 76, true); 
enterUp = $.CGEventCreateKeyboardEvent($(), 76, false); 
$.CGEventPostToPid(iPid, enterDown); 
delay(0.1) 
$.CGEventPostToPid(iPid, enterUp); 
+0

Vielen Dank für die Antwort, aber ich spreche hier über tatsächliche "Enter" -Fähigkeit.Mein Skript schreibt den Text korrekt in dieses UIElement, aber es erfordert, dass die Anwendung mit dem "Enter" -Schlüsselcode beginnt. Ich versuche "Enter" zu drücken, ohne die Anwendung nach vorne zu aktivieren. – gnis

+0

Es ist unmöglich zu helfen, ohne den Namen Ihrer Anwendung zu kennen und zu wissen, was passiert, wenn Sie die "Enter" -Taste drücken. Aber, es gibt einige Aktionen (** wenn verfügbar **), die die Enter-Taste auf einigen ui-Elementen simulieren, ** AppleScript ** Beispiel: 'führe die Aktion" AXConfirm "von someSpecificElement aus ...' – jackjr300

+0

Ahh - Entschuldigung wegen des Mangels von Informationen. Ich versuche, etwas auf iTunes (Apple Music) zu suchen. Ich habe versucht, die Aktion "bestätigen" ohne Erfolg - nichts passiert. Ist dies möglich, ohne iTunes App im Voraus zu bringen? – gnis

Verwandte Themen