2017-09-08 27 views
0

저는 Javascript로 간단한 Automator 스크립트를 작성하고 있습니다.앞에없는 응용 프로그램에 키 코드를 보낼 수 있습니까?

전방에없는 OS X 응용 프로그램에 키 코드 (또는 키 스토어)를 보내려고합니다.

기본적으로이 코드를 실행하고 스크립트가 특정 응용 프로그램을 열고 텍스트를 쓰고 입력을 누르는 동안이 작업을 수행하려고합니다.이 모든 작업은 다른 작업을 방해하지 않습니다. 스크립트 사전에 Application("System Events").processes['someApp'].windows[0].textFields[0].keyCode(76);

Processes Suite에서 keyCode 방법이있다 :

나는 이런 식으로 뭔가를 할 수 있습니다. 위의 코드는, 그러나, 다음 오류가 발생합니다 : 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

"입력"에 대한 나의 경험에서 나는 그것이 사실이라고 생각하지 않는다. KeyCode 메서드는 "enter"키 코드를 사용하여 Keystroke 메서드와 동일하게 작동합니다. 전화를 걸 때 "입력"이 프론트 응용 프로그램으로 전송됩니다. – gnis

답변

1

그것은 GUI 스크립팅 (접근성)의 도움으로 전면에없는 응용 프로그램에서 텍스트를 작성하는 것이 가능하지만, :

  • 당신은 요소가 창에 어떤 UI 알 필요가 특정 응용 프로그램의 속성과 속성을 확인하고 특정 요소의 속성 및 속성을 알 수 있습니다.
  • System Preferences --> Security & Privacy --> Accessibility에 스크립트를 추가해야합니다.

여기 (맥 OS 시에라 테스트) 샘플 스크립트는 "텍스트 편집기"응용 프로그램의 전면 문서에서 커서의 위치에서 텍스트를 작성합니다.

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

업데이트

배경 응용 프로그램에 몇 가지 핵심 코드를 보내려면 탄소 프레임 워크의 CGEventPostToPid() 방법을 사용할 수 있습니다.

여기 (내 컴퓨터에서 작동, 맥 OS 시에라아이튠즈 버전 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 ** 예 : '조치 수행'AXE "someSpecificElement ..."의 축약. – jackjr300

+0

아 - 죄송합니다. 정보. iTunes (Apple Music)에서 무언가를 검색하려고합니다. 나는 성과가없는 "확인"액션을 아무런 성공없이 시도했다. 아무 일도 일어나지 않았다. iTunes 앱을 선행하지 않아도 가능합니까? – gnis