2017-09-11 9 views
1

대화 상자 (6 자리 코드)에 텍스트를 표시해야하는 몇 가지 작업을 자동화하려고합니다. 나는 애플 스크립트의 분야에서 초보자이고 비슷한 일이 이렇게 할 수있는 몇 가지 예를 읽고AppleScript를 사용하여 NSTextFieldCell 값 가져 오기

Accessibility Inspector

:

dialog box

접근성 경위는 다음과 같은 계층 구조를 밝혀

set myText to textField's stringValue() as text 

하지만 내 경우에는 작동 할 수 있는지 확실하지 않습니다. e 접근성 검사자는 NSTextFieldCell에 6 자리 코드가 포함 된 변수 이름을 표시하지 않습니다.

NSTextFieldCell에서 6 자리 코드를 추출하고 쉘 스크립트가이 코드를 사용할 수 있도록이 값을 반환 할 수 있습니까?

지금이 바로 같은이 -

tell application "FollowUpUI" 
    activate 
    # get the 6 digit code 
end tell 

업데이트

도움이 후를, 내가 텍스트 필드에 통과하는 것을 시도했다

tell application "System Events" 

    repeat with theProcess in processes 

     #initialize 
     tell theProcess 
      set processName to name 
      set allWindows to windows 
     end tell 

     #check if process exists 
     if processName is "FollowUpUI" then 

      activate 

      say "FollowUpUI found" 

      set windowsCount to count of the allWindows 

      #only one window should exist 
      if windowsCount is 1 then 
       say "1 window was found" 

       tell window 1 
        tell group 1 
         tell text field 1 
          set code to value 
         end tell 
        end tell 
       end tell 

      end if 
     end if 
    end repeat 
end tell 

하지만, 오류로 인해 막혔습니다 -

System Events got an error: cant get window 1. Invalid index. 

구문 오류인지 확실하지 않습니다. 모든 포인터가 도움이 될 것입니다. 당신이 참조해야하기 때문에 감사

+1

AppleScript에서'System Events'와 (GUI) 스크립팅을 사용해야합니다. Cocoa를 사용하면 다른 응용 프로그램/프로세스의 UI 요소에 액세스 할 수 없습니다. – vadian

+0

올바른 방향, 예를 들어 알려주시겠습니까? 나는 못생긴 해결책을 생각하지 않을 것이다. –

+2

"[프로세스 이름]"프로세스에게 "값을 값으로 설정하도록 텍스트 필드 1에 알리려면 그룹 1에게 알리려면"[응용 프로그램] "시스템 이벤트"에 명령을 전달해야합니다. '[] '의 모든 값은 괄호가없는 실제 코드에서 임의적입니다. – vadian

답변

1

오류가 발생 window 1 of process "FollowUpUI"

귀하의 코드가 너무 복잡

, 당신은 단지 프로세스가

tell application "System Events" 
    if exists process "FollowUpUI" then 
     tell process "FollowUpUI" 
      tell window 1 
       tell static text 1 of group 1 
        set code to its value 
       end tell 
      end tell 
     end tell 
    end if 
end tell 

을 존재하는 경우 코드는 워크 플로우의 일부인 경우 확인해야 당신 윈도우가 나는 그것이 REFE 있는지 확인 value 전에 its을 추가

tell application "System Events" 
    repeat until exists window 1 of process "FollowUpUI" 
     delay 0.2 
    end repeat 
    tell window 1 of process "FollowUpUI" 
     tell static text 1 of group 1 
      set code to its value 
     end tell 
    end tell 
end tell 

열릴 때까지 기다릴 필요가 rs를 현재 참조 (텍스트 필드)

키 또는 마우스 이벤트를 창에 보내지 않으므로 activate은 필요하지 않습니다.

+0

감사합니다. @vadian, 대화 상자를 열어 테스트하고 있습니다. 두 스 니펫 모두 여전히 동일한 오류를 발생시킵니다. '시스템 이벤트에 오류가 있습니다. 프로세스 "FollowUpUI"의 창 1 그룹 1 텍스트 필드를 가져옵니다. 잘못된 색인'. 프로세스가 존재하는지 확인하기 위해 프로세스 선언문 (statement)을 보낸 후에 발견 된 "say"문을 넣었습니다. 모든 도움에 다시 한 번 감사드립니다. –

+0

그런 다음 참조가 잘못되었습니다. 'UI Browser' (무료는 아니지만 시용 기간이있을 수도 있음) 또는 속성 검사기가있는'Script Debugger' (무료가 아닌)와 같은 편집기를 사용할 수 있습니다. 또는 루트 (프로세스)에서 대상 (텍스트 필드)까지'UI 요소 '를'로그'해야만 영향을받는 창이 열려서 참조 사슬을 알아낼 수 있습니다. – vadian

+0

추신 : 나는 ** 텍스트 필드 **가 아닌 것으로 의심합니다. 그게 뭔가 다른 것입니다. '... 셀이 나타납니다.' – vadian

0

답변이 없지만 댓글에 코드를 붙여 넣을 수 없습니다. UI 요소를 얻는 방법은 다음과 같습니다. Command-Shift-4를 눌러 좌표가있는 커서를 가져옵니다. UI 요소를 조준하고 좌표를 기억하십시오. 화살표 커서를 다시 얻으려면 클릭하십시오. 이 스크립트의 좌표를 사용하십시오.

activate application "FollowUpUI" 
tell application "System Events" 
    tell application process "FollowUpUI" 
     click at {290, 150} 
    end tell 
end tell 

스크립트 편집기는 컴퓨터를 제어 할 수 있어야합니다. 시스템 환경 설정, 보안 & 프라이버시, 프라이버시에서 설정할 수 있습니다.

+0

Done 키를 누르기 전에 6 자리 코드를 추출해야합니다. –