액세스 가능성 승인없이 pid의 가장 최근 창 초점


0

저는 현재이 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창을 앞쪽으로 가져 오는 데 사용할 수있었습니다.

감사하십시오.

답변:


1

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

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가 발생합니다.


정말 고마워요 !! 나는 이것으로 고투하고 있었다! 나는 이것을 내일 시험하고보고 할 것이다. :) 그래서 제 3의 문제점 (제 3의 총알) 나는 정신이 문제가 아냐?
Noitidart, 19:14

누군가 최근에 창문을 열려고 이걸 시도하라고했는데 접근성이 좋다고 생각하니? tell (1st window whose value of attribute "AXMain" is true) *(linebreak)* set theWindow to value of attribute "AXTitle" *(linebreak)* end tell
Noitidart, 19:14

안녕하세요, 거기에 친구, 나는 거기에 첫 번째 스크립트에서 잘못된 유형이라고 생각합니다. 나는 그것이 1 whose unix id is 1234유닉스에 주목 해야한다고 생각한다 . 위의 1 whose id is 1234(유닉스와 wihtout) 당신이 확인하시기 바랍니다 수 있습니다
Noitidart

open -a "$(ps -p 1234 -o comm=)"방법 에 대한 약간의 빛을 공유해 주실 수 있습니까? 나는 터미널에서 그것을 실행했다, 나는 파이어 폭스의 달리기를해야만한다. 하나의 PID는 303이고 다른 PID는 475입니다.이 방법을 사용하는 두 PID는 모두 303의 PID에 초점을 맞추고 있습니다. 첫 번째 파이어 폭스의 명령으로 두 번째 파이어 폭스를 열었 기 때문이라고 생각합니까? 여기 내 추신 : gist.githubusercontent.com/Noitidart/ef5d2fa9e526ec93d761/raw/... 감사합니다. 선생님!
Noitidart

안녕하세요, 선생님, 다시 테스트를 open -a해본 후 두 가지 방법 모두이 솔루션에서 공유 되며, AppleScript는 둘 다 파이어 폭스의 단일 프로세스를 타겟팅하는 것 같습니다. 매우 흥미 롭습니다. 맨 위의 스크립트에이 스크립트가 없습니다. 나는 강하게 믿는다. 왜냐하면 나는 첫 번째 인스턴스에서 파이어 폭스의 두 번째 인스턴스를 열고 있기 때문에 이것이 사실이라고 생각 하는가? 수정 방법에 대한 아이디어가 있습니까?
Noitidart
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.