액세스 가능성 승인없이 pid의 가장 최근 창 초점 있습니다 . tell application “System Events”

저는 현재이 AppleScript를 사용하여 PID의 가장 최근 창으로 포커스를 설정하려고합니다 450. 예를 들어 pid가 여기에 있습니다 .

tell application "System Events"
  set frontmost of the first process whose unix id is 450 to true
end tell

이것은 접근성 승인을 요구하지 않는다는 점에서 훌륭하게 작동합니다. 그러나 단점은 다음과 같습니다.

  • 최소화 된 창을 무시하므로 모든 창을 최소화하면 아무 것도 집중되지 않습니다.
  • 여러 공간에 걸쳐 창이 있고 마지막으로 액세스 한 창이 공간 X에 있었던 경우. 공간 Y에 있고 공간 Y에 해당 응용 프로그램의 창이있는 경우 가장 최근에 사용 된 공간 Y에 초점을 맞 춥니 다.
  • 나는 아직 그것을 만난 적이 없다. 그러나 분명히 사람들은 다른 응용 프로그램의 윈도우가 윈도우 상단에 있다면 그것이 정상에 오지 않을 것이라고 말한다.

perform action AXRaise그러나 나는 이 접근성 API 승인이 필요하다는 것을 알고있다 . 애드온 사용자는 단일 앱 액세스를 허용하는 데 어려움을 겪고 있습니다. 특히 첫 번째 팝업에서 미스를 허용하지 않는 경우 더욱 그렇습니다.

그래서 이것이 애플 스크립트로 이루어졌습니다. 탄소 (코어 – 기반, 코어 그래픽) 또는 코코아로 할 수있는 방법을 알고 있다면 그것을 사용할 수 있습니다.

osx 10.9에서는 AXMakeProcessTrusted더 이상 사용하지 않을 것입니다. 그렇지 않으면 사용자를 괴롭 히지 않고 내 앱 액세스 권한을 부여한 다음 AXUIElementSetAttributeValue창을 앞쪽으로 가져 오는 데 사용할 수있었습니다.

감사하십시오.



답변

이렇게하면 첫 번째 버크는 수정되지만 두 번째 버킷은 수정되지 않습니다.

tell application "System Events"
    bundle identifier of process 1 whose id is 1234
end tell
tell application id result
    reopen
    activate
end tell

다음과 같은 경우에도 마찬가지입니다 open.

open -a "$(ps -p 1234 -o comm=)"

열려있는 창이없는 경우 reopen새 기본 창을 열고 모든 창을 최소화하면 reopen하나의 창을 최소화하지 않습니다. activate응용 프로그램을 최전방으로 만듭니다.

activatefrontmosttrue로 설정 하면 모든 창을 표시하지만 open -a하나의 창만 표시합니다.

나는 생각했다.

lsappinfo launch ASN="$(lsappinfo find pid=1234)"

또한 작동하지만 이미 실행중인 응용 프로그램을 시작하려고 할 때 segfault가 발생합니다.