4 votes

Applescript : Détecter si une souris ou un trackpad est attaché

Mon script définit la direction de défilement naturelle d'une souris ou d'un trackpad (trackpad MB ou Magic Trackpad), mais au lieu de permettre à l'utilisateur de choisir lequel est attaché, j'aimerais pouvoir exécuter par programmation l'une des deux fonctions en fonction du matériel attaché.
Y a-t-il un moyen de vérifier (ie. AS ou Shell script) quel matériel est attaché ?

Par exemple, voici ce que je veux accomplir :
Si : T
Sinon, si : La souris est attachée, lancez la fonction Souris.
Sinon, si : La souris et le Trackpad sont connectés, exécutez les deux
Sinon : erreur, aucun périphérique d'entrée détecté

Je suis à la recherche d'une fonction robuste mais je ne sais pas par où commencer.

Fonction de la souris :

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"

Fonction du 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"

Merci d'avance, toute aide est grandement appréciée.

2voto

user3439894 Points 52496

Ok, d'abord j'ai mal lu votre question donc j'ai réécrit ma réponse et ensuite parce que le paramètre de préférence "Direction du défilement : naturel" est mondial j'ai réécrit le code également.

Tel que codé, il y a deux sous-programmes Les périphériques sont appelés en fonction de l'existence des périphériques définis, un pour la souris et un pour le trackpad (interne ou externe). C'est défini comme dans la valeur de mouse , externalTrackpad y internalTrackpad tel que renvoyé par le do shell script commandes configuré pour rechercher l'Apple Magic Mouse, l'Apple Wireless Trackpad et un Trackpad interne. Ces sites commandes peut être modifié selon les besoins/souhaits.

En gros, ce qui se passe, c'est que variables sont initialisés et ensuite testés par la if déclarations et agi en conséquence comme codé.

  • Si une souris et un trackpad externe n'existent pas et qu'un trackpad interne n'existe pas alors un message est affiché et le script se termine.

  • Si une souris et un pavé tactile externe n'existent pas et qu'un pavé tactile interne existe, alors l'écran de la souris est le suivant TrackpadIsAttached sous-routine fonctionne, le "sens de défilement : naturel" case à cocher est décochée (si elle est cochée), puis l'option script se termine lorsque le réglage est mondial et il n'est pas nécessaire de poursuivre le traitement.

  • Si une souris ou un trackpad (interne ou externe) existe, alors soit sous-routine est codé de manière appropriée, le "sens de défilement : naturel". case à cocher n'est pas cochée (si elle l'est), puis l'option script se termine lorsque le réglage est mondial et il n'est pas nécessaire de poursuivre le traitement.

    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


J'ai évidemment utilisé ma Magic Mouse Apple et mon Trackpad sans fil Apple comme exemples et j'ai fait des tests pour m'assurer que tout fonctionnait comme prévu sur mon MacBook Pro. Vous pouvez utiliser n'importe quelle fabrication, marque, modèle pour une souris et un trackpad externes et vous aurez juste besoin de modifier le script de manière appropriée. Si vous avez besoin d'aide supplémentaire à ce sujet, n'hésitez pas à demander. J'ai également testé ceci sous OS X 10.8.5 et cela a fonctionné pour moi comme écrit.

1voto

Douglas Points 10417

Il est impossible d'accéder aux périphériques HID (claviers, souris, etc.) sans se lancer dans le développement de logiciels.

Cependant, comme "hack", vous pouvez interroger la base de données de l'UE. system_profiler pour voir ce qui est connecté si vous savez déjà ce que vous avez connecté.

Par exemple, pour voir si ma souris Logitech est connectée, vous pouvez lancer la commande suivante system_profiler SPUSBDataType | grep -i logitech

et cela donnera

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

Donc, pour spécifier votre appareil spécifique, vous pouvez modifier la commande comme suit : system_profiler SPUSBDataType | grep -i 0x046d

Donc un simple bash script pour vérifier si la souris est connectée serait

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

Vous feriez quelque chose de similaire pour le trackpad

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X