Ist es möglich, die Bildschirmauflösung mit einer Tastenkombination zu ändern?

Ich verwende unterschiedliche Bildschirmauflösungen, je nach Aktivität, die ich tagsüber mache.
Wenn ich zum Beispiel codiere, bevorzuge ich es, mehr Platz zur Verfügung zu haben.
Ist es möglich, eine Tastenkombination zuzuweisen, um die skalierte Anzeigeauflösung zu ändern?
(siehe beigefügten Screenshot)Geben Sie hier die Bildbeschreibung ein

display_manager.py hat bei mir funktioniert. Ich habe mit Automator einen Workflow erstellt und ihm über Systemeinstellungen > Tastatur > Shortcuts eine Tastenkombination zugewiesen. (Mein Befehl: /path/to/display_manager.py res 1920 1080 60)

Antworten (11)

Ja, Sie können dies vollständig erreichen, ohne zusätzliche Apps auszuführen. Auf meinem System habe ich zwei verschiedene Skripte erstellt. Ein Skript zum Anpassen der Bildschirmauflösung höher und eines zum Anpassen der Bildschirmauflösung niedriger. Auf meinem System habe ich gerade beide Skripte als Diktierbefehle aktiviert, aber wenn Sie einen neuen Dienst über Automator erstellen, können Sie diesen Diensten Tastenkombinationen zuweisen.

Hier sind zunächst die beiden Skripte, mit denen ich begonnen habe.

Dieser dient dazu, die Bildschirmauflösung zu erhöhen: wenn sich meine Bildschirmauflösung bereits in der Standardposition befindet

Geben Sie hier die Bildbeschreibung ein

tell application "System Preferences"
    reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
end tell
tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
    click radio button "Scaled" of radio group 1 of tab group 1
    click radio button 4 of radio group 1 of group 1 of tab group 1
end tell
quit application "System Preferences"

Das Ausführen dieses Skripts führt zu folgendem Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Dieses nächste Skript dient dazu, die Bildschirmauflösung zu verringern: wenn meine Bildschirmauflösung nicht auf die Standardeinstellung eingestellt ist

tell application "System Preferences"
    reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
end tell
tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
    click radio button "Scaled" of radio group 1 of tab group 1
    click radio button 3 of radio group 1 of group 1 of tab group 1
end tell
quit application "System Preferences"

Nachdem ich sichergestellt hatte, dass beide Skripte korrekt funktionieren, öffnete ich Automator und erstellte einen neuen Dienst für die höhere Anzeigeauflösung und fügte das entsprechende Skript hinzu, wie in der folgenden Abbildung gezeigt. Ich habe diese Datei als rez_higher.workflow gespeichert

Geben Sie hier die Bildbeschreibung ein

Von hier aus habe ich Systemeinstellungen / Tastatur / Verknüpfungen / Dienste geöffnet. Ich habe diesen neuen Dienst, den ich erstellt habe, gefunden und ihm eine Tastenkombination zugewiesen

Geben Sie hier die Bildbeschreibung ein

Befolgen Sie danach einfach die gleichen Verfahren, um einen neuen Workflow und Dienst für die niedrigere Anzeigeauflösung zu erstellen

Danke, das hat funktioniert wie ich wollte. Ich habe auch einen Workflow gefunden, bei dem Sie die Auflösungsänderung im selben Skript hier umschalten können
Das ist großartig. Ich verfolge das meiste. Wo kann man Details wie den Namen des Ankers „displayDisplayTab“ finden? Ich möchte etwas Ähnliches entwickeln, um die Desktopfarbe festzulegen (und zu deaktivieren). Alle Details sind sehr willkommen.
Dieses Skript im Beispiel wird als Fehler ausgegeben: error "System Events got an error: Can’t get tab group 1 of window \"Built-in Retina Display\" of process \"System Preferences\". Invalid index.Wird es durch ein OSX-Update beschädigt?
@JakubBoucek, siehe meinen Fix, der als neue Antwort gepostet wurde
VIELEN DANK an wch1zpink und @Zade! Das ist genau das, was ich erhofft hatte! Ich werde dies mehr als 10 Mal pro Tag verwenden, da ich bei der Bildschirmfreigabe mit Kollegen eine niedrigere Auflösung verwenden muss.
Ich brauchte delay 1wie wch1zpink Shows (im Gegensatz zu @Zade). Außerdem bemerkte ich später in Catalina 10.15.7, dass meine Tastenkombinationen nicht funktionierten, je nachdem, welche Anwendung fokussiert war, als ich sie eingab. Ich musste Berechtigungen in Systemeinstellungen > Sicherheit & Datenschutz > Automatisierung (und auch Eingabehilfen) erteilen. Ich wünschte, ich wüsste einen Weg, dies zu umgehen, da ich unmöglich alle Apps, die ich möglicherweise geöffnet habe, im Voraus kennen kann, wenn ich die Verknüpfung verwenden möchte. Aber das ist immer noch super nützlich! Danke.

Ich habe das kostenlose Befehlszeilentool displayplacer geschrieben , um Auflösungen/Drehungen für Desktops mit einem oder mehreren Monitoren zu ändern. Sie können ein "Profil" (Beispiel unten) über eine Tastenkombination mit Automator wie wch1zpink erklärt, BetterTouchTool usw. auslösen.

displayplacer 'id:69731906 res:1440x900 scaling:on origin:(0,0) degree:0'

Behebung der Antwort von wch1zpink auf macOS 13.0.1 dank der UI-Browser-App:

do shell script "open x-apple.systempreferences:com.apple.preference.displays"
tell application "System Events"
    tell application process "System Settings"
        repeat until (exists UI element 1 of group 1 of scroll area 2 of group 1 of group 2 of splitter group 1 of group 1 of window "Displays")
            delay 0.1
        end repeat
        tell window "Displays"
            set displayOptions to UI element 1 of group 1 of scroll area 2 of group 1 of group 2 of splitter group 1 of group 1
            set theButton to (first button of displayOptions whose value of attribute "AXAttributedDescription" contains "Selected")
            if help of theButton is "2560 × 1440" then
                click button 1 of displayOptions
            else
                click button 3 of displayOptions
            end if
        end tell
    end tell
end tell
quit application "System Settings"

Fix unter macOS 12.0.1:

tell application "System Preferences"
    reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
end tell
tell application "System Events"
    tell application process "System Preferences"
        repeat until (exists radio button "Scaled" of radio group 1 of group 1 of window "Displays")
            delay 0.1
        end repeat
        tell window "Displays"
            set isScaled to value of radio button "Scaled" of radio group 1 of group 1
            if isScaled = 0 then
                click radio button "Scaled" of radio group 1 of group 1
                click button 1 of UI element 3 of group 1
            else
                click radio button "Default for display" of radio group 1 of group 1
            end if
        end tell
    end tell
end tell
quit application "System Preferences"

Fix unter macOS 10.15.4:

tell application "System Preferences"
    reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
end tell
tell application "System Events" to tell process "System Preferences" to tell window "Built-in Retina Display"
    set isScaled to value of radio button "Scaled" of tab group 1
    if isScaled = 0 then
        click radio button "Scaled" of tab group 1
        click radio button 1 of radio group 1 of group 1 of tab group 1
    else
        click radio button "Default for display" of tab group 1
    end if
end tell
quit application "System Preferences"
Ich habe immer noch den gleichen Fehler. Fehler System Events got an error: Can’t get radio button \"Scaled\" of tab group 1 of window \"Built-in Retina Display\" of process \"System Preferences\"." number -1728 from radio button "Scaled" of tab group 1 of window "Built-in Retina Display" of process "System Preferences"Mit dem vorherigen Code ist die Nummer 1719. Habe gerade die Nummer geändert
@leon Verwenden Sie die UI-Browser-App, um die Namen der Schaltflächen in Ihrer Version von macOS abzurufen.

Okt. 2022 macOS 12.6 Lösung

Hinzufügen einer weiteren Lösung zur Liste. Die Lösung von Imron Gamidli brachte mich mit dem Toggle-Verhalten am nächsten an das heran, was ich wollte.

Hier ist mein Skript, das ich als Raycast-Befehl hinzugefügt habe, damit ich von Raycast auslösen oder eine Tastenkombination zuweisen kann.

#!/usr/bin/osascript

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Toggle Resolution
# @raycast.mode silent

# Optional parameters:
# @raycast.icon 🤖

set monitor to 2
tell application "System Preferences"
    activate
    set the current pane to pane id "com.apple.preference.displays"
    delay 2
    tell application "System Events"
        tell window "Displays" of application process "System Preferences"
            click button "Display Settings…"
            delay 2
            click row monitor of outline 1 of scroll area 1 of sheet 1
            click radio button "Scaled" of radio group 1 of sheet 1
            try
                set selected_button to button "Resolution5, Selected" of UI element 6 of sheet 1
                click button "Resolution1" of UI element 6 of sheet 1
            on error
                click button "Resolution5" of UI element 6 of sheet 1
            end try
            delay 0.5
            click button "Done" of sheet 1
        end tell
    end tell
end tell
# The next line is optional and could be commented out by prepending with a hash (#).
delay 2
quit application "System Preferences"
Vielen Dank, dass Sie dies geteilt haben, da meine Antwort apple.stackexchange.com/a/436069/53510 nicht mehr funktioniert. Ich kann Ihre Antwort auch nicht zum Laufen bringen. Syntaxfehler: Systemereignisse gehen auf Fehler: Schaltfläche "Auflösung5" des UI-Elements 6 von Blatt 1 des Fensters "Anzeigen" des Anwendungsprozesses "Systemeinstellungen" kann nicht abgerufen werden.
@Ryan Auf welcher Betriebssystemversion bist du? Dies funktioniert bei mir auf 12.6 und der einzigen Version, auf der ich es getestet habe. Ich habe gelegentlich einige Probleme bemerkt, ich denke, wenn die Maschine unter Last steht. Sie können versuchen, mit den Verzögerungen zu spielen und sehen, ob eine längere Verzögerung hilft.
Danke. Ich bin am 12.6. Heute sehe ich, dass ich berechtigt bin, 13.0 herunterzuladen, also werde ich vielleicht versuchen, innerhalb einer Woche oder so zu aktualisieren. Auch bei längeren Verzögerungen erhalte ich immer noch den Fehler, den ich in meinem vorherigen Kommentar erwähnt habe. Aus Neugier, woher wussten Sie, wie man dieses Skript schreibt? Wie kann ich die Namen und Nummern der einzelnen Bereiche / Elemente auf dem Bildschirm herausfinden? Danke!!
@Ryan Hmm, dann bin ich mir nicht sicher. Es funktioniert immer noch auf meiner Maschine. Ich würde vermuten, dass 13.0 das Skript beschädigen wird, da die Systemeinstellungen neu gestaltet wurden, indem sie in Systemeinstellungen umbenannt und neu gestaltet wurden. Was das Schreiben des Skripts angeht, bin ich in Apple Skript super unerfahren. Ich habe hier eine Reihe von Optionen ausprobiert, viel geraten, das Automators-Forum durchsucht und festgestellt, dass Sie einige der Elementnamen über das Accessibility Inspector-Tool abrufen können. Es gibt auch Unterstützung für Haltepunkte und Protokollierung, die Sie zum Ausdrucken von Elementen verwenden können. Falls hier noch jemand einen Rat hat, bin ich auch gespannt.
Ich glaube, ich habe das Accessibility Inspector-Tool noch nicht ausprobiert. Danke.
@ Ryan lass mich wissen, wie es läuft. Ich nehme gerne Änderungen an meiner Antwort vor und könnte dies auch auf GH veröffentlichen, wenn es nützlich ist
Ok, ich habe Xcode installiert und bin zu Xcode > Open Developer Tool > Accessibility Inspector gegangen. Es scheint, wie es nützlich sein wird, aber es ist nicht super einfach. Ich werde auf developer.apple.com/library/archive/documentation/Accessibility/… nachlesen und sehen, was ich herausfinden kann.
Ich konnte das immer noch nicht herausfinden. Ich werde meine apple.stackexchange.com/q/449891/53510-Frage mit einem Screenshot aktualisieren.

Was für mich im Jahr 2022 unter macOS 12.1 auf dem MacBook Pro funktioniert

So haben Sie eine einzelne Tastenkombination, die zwischen 2 Auflösungen umschaltet:

  1. Automator > Datei > Neu > Schnellaktion > Auswählen
  2. Suchen Sie nach „AppleScript ausführen“ und doppelklicken Sie auf das Ergebnis.
  3. Ersetzen Sie den Standard-Skriptcode durch das, was ich unten bereitstelle.
  4. Versuchen Sie, ein paar Mal auf die Schaltfläche Ausführen zu klicken, um zu sehen, ob das Umschalten funktioniert.
  5. Speichern Sie als "toggle_display_resolution". (Wenn Sie es später einmal bearbeiten möchten, öffnen Sie es /Users/your_username/Library/Services/toggle_display_resolution.workflowin Automator).
  6. Automator schließen.
  7. Systemeinstellungen > Tastatur > Shortcuts > Dienste
  8. Weisen Sie dem neu erstellten Dienst (der sich wahrscheinlich ganz unten in der Liste befindet) eine Tastenkombination zu.

Übrigens müssen Sie möglicherweise Ihre "Sicherheit & Datenschutz" > Barrierefreiheit bearbeiten. Siehe Antwort .

on run {input, parameters}
    
    # https://apple.stackexchange.com/a/436069/53510
    tell application "System Preferences"
        reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
    end tell
    tell application "System Events"
        tell application process "System Preferences"
            repeat until (exists radio button "Scaled" of radio group 1 of group 1 of window "Displays")
                delay 0.1
            end repeat
            tell window "Displays"
                set isScaled to value of radio button "Scaled" of radio group 1 of group 1
                if isScaled = 0 then
                    click radio button "Scaled" of radio group 1 of group 1
                    # button '5' means highest resolution (smalled font):
                    click button 5 of UI element 3 of group 1
                else
                    click radio button "Default for display" of radio group 1 of group 1
                end if
            end tell
        end tell
    end tell
    # The next line is optional and could be commented out by prepending with a hash (#).
    quit application "System Preferences"
    
    return input
end run

PS Vielen Dank an wch1zpink und Zade , deren Antworten zu meinen geführt haben. Bewerten Sie auch ihre.

PPS Ich bin neugierig zu erfahren, ob ich diese Schnellaktion / diesen Service einfacher teilen könnte.

Ab macOS 12.2.1 mit der Einführung von Shortcuts benötigen Sie keine Tastenkombination mehr. Wie auch immer, vielen Dank an Ryan , der die Grundlage meines Codes bereitgestellt hat. Hier kommt's:

    on run {input, parameters}
        
        # https://apple.stackexchange.com/a/436069/53510
        tell application "System Preferences"
            activate
            reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
            delay 2 #Make longer if needed
            tell application "System Events"
                tell application process "System Preferences"
                    tell window 1
                        click button 1 #Monitor settings
                        delay 0.7 #Make longer if needed
                        select row 2 of outline 1 of scroll area 1 of sheet 1 #Row=monitor number
                        click radio button 2 of radio group 1 of sheet 1 #Select "Scaled"
                        click button 2 of UI element 6 of sheet 1 #Select resolution
                        click button 2 of sheet 1 #Done
                        click button 4 #Close System Preferences
                    end tell
                end tell
            end tell
        end tell
        return input
    end run

Verzögerungen werden wegen der Fensteröffnungszeit benötigt, sonst bricht die Indizierung ab. Wenn es immer noch kaputt geht, verlängern Sie einfach die Verzögerungen. Wenn Sie zB Ihren 3. Monitor beeinflussen wollen, schreiben Sie für die Zeilennummer stattdessen "Zeile 3". Wenn Sie eine zweite Zeile erstellen, um Ihre Auflösung zu erhöhen, und skaliert daher bereits ausgewählt ist, können Sie diese Zeile entfernen.

BEARBEITEN: Ändern Sie für MacOS 12.3 Taste 4 in Taste 5

Dies funktionierte für mich auf Monterey 12.3.1, um die Auflösung auf meinem 2. Monitor aus der Liste zu ändern. Ich werde dieses Skript an Automator übertragen, um die Auflösung mit der Tastatur zu ändern

set res to 3
set monitor to 2
tell application "System Preferences"
    activate
    set the current pane to pane id "com.apple.preference.displays"
    delay 2
    tell application "System Events"
        tell window "Displays" of application process "System Preferences"
            click button "Display Settings…"
            delay 2
            click row monitor of outline 1 of scroll area 1 of sheet 1
            click radio button "Scaled" of radio group 1 of sheet 1
            click button res of UI element 6 of sheet 1
        end tell
    end tell
end tell
Vielen Dank, dass Sie dies geteilt haben, da meine Antwort apple.stackexchange.com/a/436069/53510 nicht mehr funktioniert. Ich kann Ihre Antwort auch nicht zum Laufen bringen. Syntaxfehler: Systemereignisse sind fehlerhaft: Schaltfläche 3 des UI-Elements 6 von Blatt 1 des Fensters „Anzeigen“ des Anwendungsprozesses „Systemeinstellungen“ kann nicht abgerufen werden. Ungültiger Index.

Sie können diese App namens SwitcherResX ( http://www.madrau.com/srx_download/download.html ) verwenden , wo sie die Möglichkeit haben, die Auflösung mit der Tastenkombination oder basierend auf der von Ihnen verwendeten Anwendung zu ändern. Sie haben eine Prüfung zu versuchen.Geben Sie hier die Bildbeschreibung ein

Danke. Ich habe auf Systemebene nach etwas gesucht, ohne zusätzliche Apps auszuführen. Aber ich werde Ihren Vorschlag als alternative Lösung in Betracht ziehen!

Die Anwendung EasyRes (kostenlos im Apple App Store) hat es für mich getan. Ich hatte eine Stunde damit verbracht, das NVRAM zurückzusetzen und verzweifelt versucht, mein 30-Zoll-Apple Cinema-Display aus dem Jahr 2006 wieder auf die volle Auflösung zu bringen, ohne Erfolg. Ich muss 25 Mal neu gestartet haben. EasyRes hat sich darum gekümmert. Vielen Dank, EasyRes, das war ich verrückt werden!

Update: Dies ist nicht "klebrig" - wenn ich neu starte, bin ich wieder auf 1280 x 800 und muss EasyRes erneut verwenden, aber ich starte nur alle paar Monate neu, daher ist dies praktikabel.

Hat jemand ein AppleScript für Ventura? Ich habe versucht, Keyboard Maestro zu verwenden, und bekomme das irgendwie nicht zum Laufen. Ich habe ein paar Apps, die keine Option zum Ändern der Schriftgröße haben, und ich würde gerne eine schnelle Möglichkeit haben, dies zu tun und sie schnell auf die Standardeinstellung zurückzusetzen.

Das beantwortet die Frage nicht wirklich. Wenn Sie eine andere Frage haben, können Sie diese stellen, indem Sie auf Frage stellen klicken . Um benachrichtigt zu werden, wenn diese Frage neue Antworten erhält, können Sie dieser Frage folgen . Sobald Sie genug Ruf haben , können Sie auch ein Kopfgeld hinzufügen , um mehr Aufmerksamkeit auf diese Frage zu lenken. - Aus Bewertung

Beachten Sie, dass die Antwort von @ wch1zpink hervorragend funktioniert, aber Big Sur nimmt einige grundlegende Änderungen daran vor und erfordert Überarbeitungen. Dies hat bei mir mit einem externen Display funktioniert, also ersetzen Sie einfach LG ULTRAWIDE durch den Titel im Fenster.

Bildschirm komprimieren

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

expand-screen

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 "Default for Display"
            end tell
        end tell
        delay 0.5
        quit application "System Preferences"
    end tell
    
    return input
end run
Bitte erklären Sie, warum und wie das funktioniert