2017-09-08 6 views
0

私はJavascriptで簡単なAutomatorスクリプトを書いています。フロントにないアプリケーションにキーコードを送信することはできますか?

正面にないOS Xアプリケーションにキーコード(またはキーストーク)を送信したいとします。

基本的には、このコードを実行して、スクリプトが特定のアプリケーションを開き、テキストを入力してEnterキーを押しながら、私の他の作業を邪魔することなく、スクリプト辞書に Application("System Events").processes['someApp'].windows[0].textFields[0].keyCode(76);

は、Processes SuitekeyCode方法がある:

は、私はこのような何かをしたいです。 上記のコードは、しかし、次のエラーがスローされます。 execution error: Error on line 16: Error: Named parameters must be passed as an object. (-2700)

私は次のコードは正常に動作していることを理解し、それが前に実行されているアプリケーションが必要です。 // KeyCode 76 => "Enter" Application("System Events").keyCode(76);

UPDATE:I iTunes(Apple Music)で何かを検索しようとしています。これは、iTunesアプリを先取りすることなく可能ですか?

+0

システムイベントの「キーコード」_command_は、フォーカスがあるものにのみ作用します。 – user3439894

+0

私の経験では、 "enter"とは思えません。 KeyCodeメソッドは、 "enter"キーコードでキーストロークメソッドと同じように動作します。呼び出し時には、「入力」がフロントアプリケーションに送信されます。 – gnis

答えて

1

それは、GUIスクリプティングアクセス)の助けを借りて、前にいないアプリケーションのテキストを書くことは可能ですが、:

  • あなたはUI要素がウィンドウにあるかを知る必要があります具体的な アプリケーションの詳細と、特定の要素の属性とプロパティを知ることができます。
  • System Preferences --> Security & Privacy --> Accessibilityにスクリプトを追加する必要があります。

ここで「テキストエディット」アプリケーションのフロント文書内のカーソルの位置にテキストを書くために(MacOSのシエラ上でテスト)サンプルスクリプトです。

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

アップデートは

バックグラウンドアプリケーションにいくつかのキーコードを送信するには、カーボン枠組みのCGEventPostToPid()方法を使用することができます。

はここに(自分のコンピュータ上で動作し、MacOSのシエラiTunesのバージョン10.6.2)iTunesでいくつかのテキストを検索するためのスクリプトです。

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

答えをありがとう、私は実際の "Enter"能力についてここで話しています。私のスクリプトは、そのUIElementにテキストを正しく書き込みますが、アプリケーションには「Enter」キーコードを先行させる必要があります。私はフロントにアプリケーションを起動せずに「入力」を押すことを試みています。 – gnis

+0

アプリケーションの名前を知らずに、 "Enter"キーを押したときに何が起こるかを知ることなく、手助けすることは不可能です。しかし、いくつかのアクション(**利用可能な場合**)はいくつかのUI要素のEnterキーをシミュレートしています** AppleScript **の例: 'アクションを実行する 'someSpecificElement ...のAXConfirm" – jackjr300

+0

ああ - 情報の私はiTunes(Apple Music)で何かを検索しようとしています。私は成功していない "確認"アクションを実行しようとしました - 何も起こりません。これは、iTunesアプリを先取りすることなく可能ですか? – gnis

関連する問題