Mette a fuoco la finestra più recente di pid senza richiedere l'approvazione dell'accessibilità

0

Attualmente utilizzo questo AppleScript per provare a mettere a fuoco la finestra più recente di un PID, ad esempio qui il mio pid è 450 .

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

Funziona meravigliosamente in quanto non richiede l'approvazione per l'accessibilità. Le stranezze sono:

  • Ignora le finestre ridotte a icona, quindi se tutte le finestre sono ridotte a icona, nulla è focalizzato
  • Se hai finestre su più spazi e l'ultima finestra di accesso era nello spazio X. Se ti trovi nello spazio Y e hai finestre di quell'app nello spazio Y, verrà messo a fuoco lo spazio utilizzato più recentemente nello spazio Y.
  • Non l'ho ancora incontrato, ma a quanto pare le persone dicono che se una finestra di altre applicazioni si trova in cima alla finestra, non verrà in cima.

Conosco perform action AXRaise , tuttavia questo richiede l'approvazione API di accessibilità. I miei utenti del mio addon stanno chiedendo di rimuoverlo, dato che molti di loro hanno difficoltà a consentire l'accesso alla singola app, specialmente se la mancanza lo garantisce sul primo popup.

Quindi questo è stato fatto in applescript, se sai come farlo in carbonio (core-foundation, core-graphics) o cacao che posso usare.

In osx 10.9 il AXMakeProcessTrusted è stato deprecato altrimenti avrei potuto utilizzarlo per garantire l'accesso alla mia app senza disturbare gli utenti e quindi utilizzare AXUIElementSetAttributeValue per portare una finestra in primo piano.

Per favore aiuto Grazie

    
posta Noitidart 18.10.2014 - 07:19
fonte

1 risposta

1

Questo risolve la prima stranezza, ma non la seconda:

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

Lo stesso vale per open :

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

Se non ci sono finestre aperte, reopen apre una nuova finestra di default, e se tutte le finestre sono ridotte a icona, reopen disminimizza una finestra. activate rende l'applicazione in primo piano.

activate e settaggio frontmost su true solleva tutte le finestre ma open -a solleva solo una finestra.

Ho pensato

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

potrebbe anche funzionare, ma sto ottenendo un segfault quando provo ad avviare un'applicazione già in esecuzione.

    
risposta data 19.10.2014 - 08:15
fonte

Leggi altre domande sui tag