Gibt es eine Möglichkeit, die Maustastenfunktion mit AppleScript oder einem Terminalbefehl ein- und auszuschalten?

Ich verwende Mac OS X 10.7.2. Gibt es eine Möglichkeit, ein AppleScript oder einen Terminalbefehl auszuführen, der die Funktion "Maustasten" auf der Registerkarte "Universeller Zugriff" schnell ein- oder ausschaltet? Idealerweise suche ich nach einer Lösung, die kein GUI-Skripting der Systemeinstellungen-App beinhaltet, obwohl das etwas besser als nichts wäre.

Ich habe defaults write com.apple.universalaccess useMouseKeysShortcutKeys 1verschiedene andere Formen dieser Aussage untersucht, aber ohne Erfolg.

Antworten (2)

Hier ist die GUI-Scripting-Lösung:

tell application "System Preferences"
    reveal anchor "Mouse" of pane id "com.apple.preference.universalaccess"
    tell application "System Events"
        tell process "System Preferences"
            tell first window
                tell first tab group
                    tell radio group 1
                        if value of radio button 1 is 1 then
                            # enabled, so disable
                            click radio button 2
                        else
                            # disabled, so enable
                            click radio button 1
                        end if
                    end tell
                end tell
            end tell
        end tell
    end tell
    quit
end tell

Es startet die Systemeinstellungen , falls erforderlich, zeigt das Fenster jedoch nicht an und beendet es anschließend, sodass es von einem UI-POV aus zumindest nicht das Fenster anzeigt.


Sie können die persistente Einstellung, auf der die Konfiguration der Systemeinstellungen basiert, mit den folgenden Befehlen ändern:

defaults write ~/Library/Preferences/com.apple.universalaccess mouseDriver -bool YES
defaults write ~/Library/Preferences/com.apple.universalaccess mouseDriver -bool NO

Leider ändert dies nur die Konfigurationsdatei und wendet die Änderungen nicht auf das laufende System an.


Während Sie die Wahltasten mit AppleScript programmgesteuert drücken können , wie folgt:

tell application "System Events"
    key down option
    key up option
end tell

Die Option „Option fünfmal drücken, um die Einstellung umzuschalten“ befindet sich auf einer höheren Ebene und wird dadurch nicht ausgelöst. Während alle regulären OptionTastendrücke ignoriert werden, nachdem Sie nur ausgeführt haben key down option, können Sie die Maustasten immer noch umschalten.


Beim Debuggen der Systemeinstellungen während des Änderns der Einstellung werden Aufrufe an LaunchUAServerIfNeededund UAMouseKeysSetEnabledim privaten UniversalAccessCoreFramework angezeigt. Wenn wir dieses Framework nicht zurückentwickeln und unsere eigenen Binärdateien schreiben, werden wir meines Erachtens keinen geeigneten programmatischen Weg finden, dies zu tun.

Eine phänomenale Antwort, die mit der Bearbeitung nur noch besser wurde. Gut gemacht!
Wie findet man heraus, wie die Anker heißen? Ich habe "Keyboard" und "Hearing" vermutet, aber ich kann nicht erraten, wie der Ankername für die Registerkarte "Seeing" lauten soll. Es ist nicht Sehen, Sehen, Sehen.... Worauf ich wirklich neugierig bin, ist, wie ich sie finden kann, ohne zu raten.

Können Sie dafür nicht das Keystroke-Scripting in AppleScript verwenden?

Etwas in der Art von:

tell application "System Events"
    repeat 5 times
    //any of these should work
    key option
    key code 58
    key code option
    //I do not know if this works
    keystroke option
end tell
Nein, leider ist die Option, soweit ich das beurteilen kann, ein Modifikator, kein skriptfähiger Tastendruck.
@Daniel Die Befehle wären key down optionund key up option, funktionieren aber nicht, auch nicht mit delay 0.1zwischen den einzelnen.
@Daniel Hast du es versucht?
Ich tat. Hat den Schalter beim Laufen nicht ausgelöst. Achten Sie darauf, dass Sie niemals ein Paar davon falsch kombinieren, wenn Sie es versuchen. AFAIK ist es unmöglich, eine auf diese Weise gedrückte Taste loszulassen, es sei denn mit dem richtigen key up.
Ja, ich habe es versucht und nein, es funktioniert nicht. :-(