Applescript: rileva se sono collegati mouse o trackpad

4

Il mio script imposta la Natural Scroll Direction di un mouse o trackpad (trackpad MB o Magic Trackpad), ma invece di consentire all'utente di scegliere quale dei due è collegato, mi piacerebbe essere in grado di eseguire a livello di programmazione uno dei due funzioni basate su quale hardware è collegato.
C'è un modo per verificare (ad esempio AS o Shell Script) quale hardware è collegato?

For example, this is what I want to accomplish:
If: Trackpad is attached then run Trackpad function.
Else if: Mouse is attached, run Mouse function.
Else if: Mouse and Trackpad are attached, run both
Else: throw error, no input devices detected

Ricevo una funzione solida ma non ho idea di dove cominciare.

Funzione mouse:

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"

Funzione 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"

Grazie in anticipo, qualsiasi aiuto è molto apprezzato.

    
posta ProGrammer 10.11.2016 - 00:26
fonte

2 risposte

2

Ok, prima ho letto male la tua domanda quindi ho riscritto la mia risposta e in secondo luogo perché l'impostazione delle preferenze "Scroll direction: natural" è global , ho riscritto il codice pure.

Come codificato ci sono due subroutine , una per il mouse e il trackpad (interno o esterno) chiamato in base all'esistenza dei dispositivi definiti. Questo è definito come nel valore per mouse , externalTrackpad e internalTrackpad come restituito dai comandi do shell script configurati per cercare Apple Magic Mouse, Apple Wireless Trackpad e un trackpad interno. Questi comandi possono essere modificati in base alle esigenze / richieste.

Fondamentalmente ciò che accade è che le variabili sono inizializzate e quindi testate dalle dichiarazioni if e applicate di conseguenza come codificate.

  • Se un mouse e un trackpad esterno non esistono e un trackpad interno non esiste, viene visualizzato un messaggio e lo script termina.

  • Se un mouse e un trackpad esterno non esistono e un trackpad interno esiste, allora viene eseguita la% subroutine di TrackpadIsAttached , la casella di controllo "Scroll direction: natural" è deselezionato (se selezionato) e quindi lo script termina poiché l'impostazione è globale e non è necessario elaborare ulteriormente.

  • Se esiste un mouse o un trackpad (interno o esterno), allora subroutine viene eseguito come codificato appropriatamente, la casella di controllo "Scroll direction: natural" è deselezionata (se selezionato) e quindi lo script termina quando l'impostazione è globale e non è necessario elaborare ulteriormente.

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

Ovviamente ho usato il mio Apple Magic Mouse e Apple Wireless Trackpad come esempi e testato per garantire che funzionasse come codificato sul mio MacBook Pro. Puoi utilizzare qualsiasi modello di fabbricazione, marca, modello per un mouse e trackpad esterni e dovrai solo modificare lo script in modo appropriato. Se hai bisogno di ulteriore aiuto, basta chiedere. Inoltre ho provato questo sotto OS X 10.8.5 e ha funzionato per me come scritto.

    
risposta data 10.11.2016 - 03:52
fonte
0

Non puoi davvero accedere ai dispositivi HID (tastiere, mouse, ecc.) senza entrare nello sviluppo del software vero e proprio.

Tuttavia, come "hack" puoi interrogare system_profiler per vedere cosa è connesso se sai già cosa hai collegato.

Ad esempio, per vedere se il mio mouse Logitech è connesso, puoi impartire il comando system_profiler SPUSBDataType | grep -i logitech

e verrà emesso

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

Quindi, per specificare il tuo dispositivo specifico, puoi modificare il comando per: system_profiler SPUSBDataType | grep -i 0x046d

Quindi un semplice script bash per verificare che il mouse sia connesso sarebbe

#!/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

Faresti qualcosa di simile per il trackpad

    
risposta data 10.11.2016 - 02:45
fonte

Leggi altre domande sui tag