Applescript: detecta si el mouse o el trackpad están conectados

4

Mi secuencia de comandos establece la Dirección de desplazamiento natural de un ratón o un Trackpad (trackpad MB o Magic Trackpad), pero en lugar de permitir que el usuario elija cuál está conectado, me gustaría poder ejecutar uno de los dos funciones basadas en el hardware que está conectado.
¿Hay alguna forma de verificar (es decir, AS o Shell Script) qué hardware está conectado?

  

Por ejemplo, esto es lo que quiero lograr:
  Si: el Trackpad está conectado, ejecute la función Trackpad.
  De lo contrario, si: el mouse está conectado, ejecute la función del mouse.
  Si no: Ratón y   Trackpad se adjunta, ejecute ambos
  Si no: error de lanzamiento, no hay dispositivos de entrada   detectado

Estoy tras una función robusta, pero no tengo idea de por dónde empezar.

Función del ratón:

tell application "System Preferences"
    reveal anchor "mouseTab" of pane id "com.apple.preference.mouse"
end tell
tell application "System Events" to tell process "System Preferences"
    tell checkbox 1 of window 1 to if value is 1 then click
end tell
quit application "System Preferences"

Función del trackpad:

tell application "System Preferences"
    activate
    set current pane to pane "com.apple.preference.trackpad"
end tell

tell application "System Events"
    tell application process "System Preferences" to tell tab group 1 of window "Trackpad"
        click radio button 2
        if value of checkbox 1 is 1 then
            click checkbox 1
        end if
    end tell
end tell
quit application "System Preferences"

Gracias de antemano, cualquier ayuda es muy apreciada.

    
pregunta ProGrammer 10.11.2016 - 00:26

2 respuestas

2

Está bien, primero he leído mal tu pregunta, por lo que he reescrito mi respuesta y, en segundo lugar, porque la configuración de preferencia "Scroll direction: natural" es global , he reescrito el código también.

Como están codificados, hay dos subrutinas , una para el mouse y el trackpad (interno o externo) que se llama en función de la existencia de los dispositivos definidos. Eso se define como en el valor para mouse , externalTrackpad y internalTrackpad tal como se devuelve de los comandos do shell script configurados para buscar Apple Magic Mouse, Apple Wireless Trackpad y un Internal Trackpad. Estos comandos se pueden cambiar según sea necesario / deseado.

Básicamente, lo que sucede es que las variables se inicializan y luego se prueban mediante las declaraciones if y se ejecutan en consecuencia según lo codificado.

  • Si no existe un mouse y un trackpad externo y no existe un trackpad interno, se muestra un mensaje y el script termina.

  • Si no existe un mouse y un trackpad externo y sí existe un trackpad interno, entonces se ejecuta la subrutina TrackpadIsAttached , la casilla de verificación "Scroll direction: natural" no está marcado (si está marcado) y luego script termina, ya que la configuración es global y no hay necesidad de continuar con el proceso.

  • Si existe un mouse o un trackpad (interno o externo), entonces subrutina se ejecuta con la codificación adecuada, la casilla de verificación "Desplazamiento en dirección: natural" casilla de verificación no está marcada (si está marcado) y luego script finaliza, ya que la configuración es global y no es necesario seguir procesando.

on MouseIsAttached()
    tell application "System Preferences"
        activate
        set current pane to pane "com.apple.preference.mouse"
    end tell
    tell application "System Events" to tell process "System Preferences"
        tell radio button 1 of tab group 1 of window 1 to if value is 0 then click
        tell checkbox 1 of tab group 1 of window 1 to if value is 1 then click
    end tell
    tell application "System Preferences" to quit
end MouseIsAttached

on TrackpadIsAttached()
    tell application "System Preferences"
        activate
        set current pane to pane "com.apple.preference.trackpad"
    end tell
    tell application "System Events" to tell application process "System Preferences"
        tell radio button 2 of tab group 1 of window 1 to if value is 0 then click
        tell checkbox 1 of tab group 1 of window 1 to if value is 1 then click
    end tell
    tell application "System Preferences" to quit
end TrackpadIsAttached

tell current application
    set mouse to (do shell script "system_profiler SPBluetoothDataType | awk '{ FS = \": \" } ; /Apple Magic Mouse/ { print $2 }'")
    set externalTrackpad to (do shell script "system_profiler SPBluetoothDataType | awk '{ FS = \": \" } ; /Apple Wireless Trackpad/ { print $2 }'")
    set internalTrackpad to (do shell script "system_profiler SPUSBDataType | awk '/Trackpad:/ { print \"Internal Trackpad\" }'")

    if mouse is equal to "" and externalTrackpad is equal to "" then
        if internalTrackpad is equal to "Internal Trackpad" then
            my TrackpadIsAttached()
            return
        else
            display dialog "The Mouse and Trackpad are not connected." buttons {"OK"} default button 1
            return
        end if
    end if

    if mouse is equal to "Apple Magic Mouse" then
        my MouseIsAttached()
        return
    end if

    if externalTrackpad is equal to "Apple Wireless Trackpad" then
        my TrackpadIsAttached()
        return
    end if
end tell

Obviamente, utilicé mi Apple Magic Mouse y el Wireless Trackpad de Apple como ejemplos y lo probé para garantizar que funcionó como estaba codificado en mi MacBook Pro. Puede usar cualquier fabricación, marca, modelo para un mouse externo y un trackpad, y solo tendrá que editar el script de manera adecuada. Si necesita ayuda adicional con eso solo pregunte. También probé esto bajo OS X 10.8.5 y funcionó para mí como está escrito.

    
respondido por el user3439894 10.11.2016 - 03:52
0

Realmente no puede acceder a dispositivos HID (teclados, ratones, etc.) sin entrar en el desarrollo real del software.

Sin embargo, como "hack", puedes consultar el system_profiler para ver qué hay conectado si ya sabes lo que has conectado.

Por ejemplo, para ver si mi mouse Logitech está conectado, puede emitir el comando system_profiler SPUSBDataType | grep -i logitech

y saldrá

Vendor ID: 0x046d  (Logitech Inc.)
Manufacturer: Logitech

Entonces, para especificar su dispositivo específico, puede modificar el comando para: system_profiler SPUSBDataType | grep -i 0x046d

Por lo tanto, una simple secuencia de comandos de bash para comprobar si el mouse está conectado sería

#!/bin/bash

mouse="0x046d"
test='system_profiler SPUSBDataType | grep $mouse | cut -d : -f 2 | cut -d "(" -f 1'

if [ $mouse == $test  ]
  then 
  echo "Mouse Connected"
else
  echo "No Mouse Connected"
fi

exit 0

Harías algo similar para el trackpad

    
respondido por el Allan 10.11.2016 - 02:45

Lea otras preguntas en las etiquetas