AppleScript para mostrar el icono del área de la barra de estado de VPN

3

Estoy intentando escribir un AppleScript para conectarme a un servicio VPN. Una vez conectado a la VPN, quiero mostrar el icono de la VPN en el área de estado de la barra de menús.

He llegado tan lejos como

  • conectarse a VPN
  • mostrando la sección de Red de Preferencias del Sistema

pero no puedo seleccionar el servicio. ¿Cómo hago eso?

tell application "System Preferences"
    activate
    set current pane to pane "com.apple.preference.network"
    tell application "System Events" to tell process "System Preferences" to tell window "Network"
        -- code to select the VPN Service "XYZ" and click the "Show VPN Status in menu"
    end tell
end tell
    
pregunta Xerces 20.04.2012 - 16:16

1 respuesta

3

La respuesta a su pregunta se puede dividir en dos partes:

  1. conectarse a una VPN no es una tarea que necesite una secuencia de comandos GUI (es decir, abrir el panel de preferencias de la red y simular un clic en un elemento), ya que esa funcionalidad forma parte de las Preferencias de red Suite de Eventos del sistema desde Leopard (creo). Todo lo que necesitas es

    tell application "System Events"
        tell current location of network preferences
            connect service "<name of your VPN>"
        end tell
    end tell
    
  2. mostrando el elemento de la barra de estado de VPN , sin embargo, no forma parte de Network Preferences Suite . Si no puede vivir con el ícono que está presente de forma permanente en el área de la barra de estado, tendrá que usar scripts de GUI para habilitarlo bajo demanda:

    property vpnToUse : "<name of your VPN>"
    tell application "System Events"
        -- first activate the network pane, wait for it to load
        -- also might want to make sure this does not interrupt user interaction
        <your code here>
        -- get the index of the VPN in the service list
        tell current location of network preferences
            repeat with i from 1 to (count of every service)
                if name of (service i) is vpnToUse then
                    set listIndex to i
                    exit repeat
                end if
            end repeat
        end tell
        -- select the VPN item in the service list and activate status bar item
        tell process (name of application id "com.apple.systempreferences")
            tell window 1
                select row listIndex of table 1 of scroll area 1
                tell checkbox 1 of group 1
                    -- only click if not already activated
                    if value is 0 then click it
                end tell
            end tell
        end tell
    end tell
    

    tenga en cuenta que esta parte, como siempre en el guión GUI, es potencialmente muy disruptiva: le roba el enfoque al usuario, en el peor de los casos incluso cancelando lo que estaba haciendo si estaba usando las Preferencias del Sistema (hay una excelente discusión sobre Los pros y los contras de los scripts GUI para manipular la configuración del sistema antes de las Preferencias Suites en MacScripter ). También es frágil (ya que está sujeto al diseño de la interfaz de usuario específica del panel de preferencias), aunque si sigue el modelo que se muestra arriba, utilizando los índices y la recuperación del nombre del proceso a través del ID de la aplicación, al menos no se verá afectado por los problemas de localización. .

respondido por el kopischke 21.04.2012 - 18:57

Lea otras preguntas en las etiquetas