Skript zum Ändern der Funktionstasteneinstellungen der Systemeinstellungen funktioniert nicht mehr in Big Sur OS11

Ich habe ein einfaches Skript, das ich seit Jahren verwende, um die Funktionstaste (fn) ein- und auszuschalten. Das Kontrollkästchen befindet sich unter Systemeinstellungen > Tastatur > Registerkarte Tastatur > 3. Kontrollkästchen nach unten. Leider funktionierte es mit OS11 nicht mehr. Ich habe das Skript jetzt optimiert, aber es erzeugt jedes Mal eine Fehlermeldung, wenn ich es ausführe.

Ich bin ein Anfänger, daher gibt es möglicherweise einen eleganteren Weg, dies zu tun als das folgende Skript - es ist einfach das, was ich verwendet habe.

tell application "System Preferences"
    reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
end tell
tell application "System Events"
    tell process "System Preferences"
        click checkbox "Use F1, F2, etc. keys as standard function keys" of tab group 1 of window 1
    end tell
end tell
quit application "System Preferences"

Dies ist der Fehler „Ungültiger Index“, den ich erhalte:

<> 1 oder Fenster 1 von <> "Systemeinstellungen" der Anwendung "Systemereignisse" kann nicht abgerufen werden.  Ungültiger Index.

Seltsamerweise funktioniert das Skript, wenn ich die Zeile <Anwendung beenden "Systemeinstellungen"> entferne und das Skript im Skripteditor mit geöffneten Systemeinstellungen ausführe (damit ich beobachten kann, was passiert). Wenn ich die Systemeinstellungen schließe und in der letzten Zeile wieder hinzufüge, <Anwendung "Systemeinstellungen" beenden>, erhalte ich im Skripteditor folgende Fehlermeldung:

error "Systemereignisse haben einen Fehler erhalten: Registerkartengruppe 1 von Fenster 1 des Prozesses "Systemeinstellungen" kann nicht abgerufen werden. Ungültiger Index." Nummer -1719 aus Registerkartengruppe 1 von Fenster 1 des Prozesses "Systemeinstellungen"

Jede Hilfe oder Beratung wird sehr geschätzt!

Antworten (3)

Abhängig von Ihrem Mac kann der Name des Kontrollkästchens anders sein (es hat bei mir auf meinem Macbook Air nicht funktioniert). Ich habe stattdessen Index in der vorgeschlagenen Lösung verwendet, sodass es auf allen Macs funktionieren sollte, bis Apple das Kontrollkästchen im Bedienfeld verschiebt.

Zu Ihrer Information, die Lösung funktioniert aufgrund einer Rennbedingung nicht mehr. Sie könnten Ihrer ursprünglichen Lösung eine Verzögerung hinzufügen, und es hätte funktioniert.

Hier ist ein Skript mit Index:

tell application "System Preferences"
    reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
end tell
tell application "System Events"
    tell process "System Preferences"
        repeat until checkbox 3 of tab group 1 of window 1 exists
            delay 0.1
        end repeat
        click checkbox 3 of tab group 1 of window 1
    end tell
end tell
quit application "System Preferences"

Dieser AppleScript-Code funktioniert für mich auf Big Sur.

tell application "System Preferences"
    reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
end tell
tell application "System Events"
    tell process "System Preferences"
        repeat until checkbox "Use F1, F2, etc. keys as standard function keys on external keyboards" of tab group 1 of window "Keyboard" exists
            delay 0.1
        end repeat
        click checkbox "Use F1, F2, etc. keys as standard function keys on external keyboards" of tab group 1 of window "Keyboard"
    end tell
end tell
quit application "System Preferences"

Wenn diese Version Fehler auslöst … hier ist eine alternative Version, die auch für mich funktioniert.

tell application "System Preferences"
    reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
end tell
tell application "System Events" to tell process "System Preferences"
    repeat until checkbox 3 of tab group 1 of window "Keyboard" exists
        delay 0.1
    end repeat
    click checkbox 3 of tab group 1 of window "Keyboard"
end tell
quit application "System Preferences"
Oh – ich sehe das Problem, das Häkchen versucht einzufügen, bevor das Fenster vollständig geladen ist. Wenn ich dieses Skript jedoch ausprobiere, scheint es das Skript zu hängen (ohne das Kontrollkästchen zu aktivieren) und ich muss das Beenden erzwingen. Irgendein Rat?
Ich habe "F1, F2 usw. Tasten als Standardfunktionstasten auf externen Tastaturen verwenden" an beiden Stellen in die Zahl 3 geändert, sodass es lautet: "Kontrollkästchen 3 der Registerkartengruppe 1 des Fensters "Tastatur"". Aus irgendeinem Grund scheint dies zu funktionieren. Ich melde mich wieder, wenn ich etwas mehr damit gespielt habe.
@Nandayo Wenn Sie meine Antwort als Lösung empfunden haben oder Ihnen geholfen haben, die richtige Lösung zu finden, würde ich mich freuen, wenn Sie positiv abstimmen und/oder meinen Beitrag akzeptieren.

Ich hatte ähnliche Probleme mit meinem Skript zum Erweitern/Komprimieren der Bildschirmauflösung und habe es behoben, indem ich umgestaltet habe, um Tell direkt in den Registerkartengruppen zu verwenden. Vielleicht kannst du versuchen:

tell application "System Preferences"
    reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
end tell
tell application "System Events"
    tell process "System Preferences"
        tell tab group 1 of window "Keyboard"
            click checkbox "Use F1, F2, etc. keys as standard function keys"
        end tell
    end tell
end tell
quit application "System Preferences"

Als Referenz war mein Fall dieses Skript, das vor Big Sur funktionierte

on run {input, parameters}
    
    activate application "System Preferences"
    tell application "System Events"
        tell process "System Preferences"
            click button "Displays" of scroll area 1 of window "System Preferences"
            delay 0.5
            
            click radio button "Scaled" of radio group 1 of tab group 1 of window "LG ULTRAWIDE"
            delay 0.5
            select row 4 of table 1 of scroll area 1 of tab group 1 of window "LG ULTRAWIDE"
            
        end tell
        delay 1
        quit application "System Preferences"
    end tell
    
    return input
end run

und die Änderungen, die ich vornehmen musste, damit es nach Big Sur funktioniert

on run {input, parameters}
    
    activate application "System Preferences"
    tell application "System Events"
        tell process "System Preferences"
            click button "Displays" of scroll area 1 of window "System Preferences"
            delay 0.5
            
            tell tab group 1 of window "LG ULTRAWIDE"
                click radio button "Scaled"
                delay 0.5
                select row 4 of table 1 of scroll area 1
            end tell
        end tell
        delay 1
        quit application "System Preferences"
    end tell
    
    return input
end run
Warum und wie funktioniert das