Wie kann ich eine Tastenkombination erstellen, die meinen Bildschirm auf den Kopf stellt?
Ich weiß, wie man diese Einstellung in den Systemeinstellungen aktiviert, aber ich möchte sie an eine Verknüpfung binden können.
Ist es möglich, mit derselben Tastenkombination die Anzeige wieder auf die normale Ausrichtung zurückzusetzen?
Ich habe ein Programm namens displayplacer geschrieben , das dies über einen Terminalbefehl einfach macht. Sie können dies mit einem Programm wie BetterTouchTool oder vielleicht Automator an eine Tastenkombination binden. Funktioniert mit allen macOS-Versionen über 10.6.
Beispiel um 180 zu drehen:displayplacer 'id:123467890 res:1920x1200 scaling:off origin:(0,0) degree:180'
Beispiel zum Umdrehen von 0:displayplacer 'id:123467890 res:1920x1200 scaling:off origin:(0,0) degree:0'
id
?displayplacer list
. Am unteren Rand der Ausgabe sehen Sie Ihr aktuelles "Profil", das darstellt, wie Ihre Monitore derzeit angeordnet sind. Bearbeiten Sie dies nach Ihren Wünschen.displayplayer list
). Sie hatten mich bei „Im Wesentlichen XRandR für macOS“. :-)Folgendes wurde unter macOS Sierra 10.12.5 und macOS High Sierra 10.13.3 getestet und funktioniert ohne Probleme auf meinem System.
Unter Verwendung des AppleScript- Beispielcodes aus meiner ursprünglichen Antwort, der als AppleScript- Anwendung mit dem Namen Flip Display 180° gespeichert und zu Systemeinstellungen > Sicherheit & Datenschutz > Datenschutz > Eingabehilfen hinzugefügt wurde , um den Code verarbeiten zu können , habe ich dann einen Automator verwendet Service-Workflow , auch Flip Display 180° genannt , um die gleichnamige AppleScript- Anwendung zu öffnen, während Sie die folgende Tastenkombination zuweisen : ⇧⌃⌘R
Beachten Sie, dass die Tastenkombination ⇧⌃⌘F , die unter OS X 10.8.5 funktionierte , mit einer Standardtastenkombination des Systems unter macOS 10.12.5 , macOS 10.13.3 in Konflikt stand und warum ich sie geändert habe. Möglicherweise müssen Sie eine andere Tastenkombination verwenden , und wie üblich müssen Sie eine auswählen, die noch keiner Anwendung zugewiesen ist, die den Fokus hat, wenn sie gedrückt wird, um diesen Automator- Dienst-Workflow zu aktivieren .
Ich habe auch den folgenden Befehl im Terminal ausgeführt , um die Dock-Kachel für die AppleScript- Anwendung nicht im Dock anzuzeigen :
defaults write '/Applications/Flip Display 180°.app/Contents/Info.plist' LSUIElement -bool yes
Wenn sich die Benutzeroberfläche für Anzeigen in den Systemeinstellungen in macOS High Sierra auf Ihrem System aus unbekannten Gründen unterscheidet, muss der AppleScript- Beispielcode jedoch geändert werden, um die Unterschiede zwischen dem, was auf meinem und Ihrem System funktioniert, zu berücksichtigen. Wenn es geändert werden muss, würde ich mir vorstellen, dass es nicht so schwer wäre, es herauszufinden.
System Preferences > Displays > Display , wie auf meinem System gezeigt:
AppleScript -Anwendung namens Flip Display 180° :
Automator- Service-Workflow , auch Flip Display 180° genannt :
Code:open -a 'Flip Display 180°'
Systemeinstellungen > Sicherheit & Datenschutz > Datenschutz > Barrierefreiheit :
Systemeinstellungen > Tastatur > Kurzbefehle > Dienste > Allgemein > Display um 180° drehen
Vorerst belasse ich meine ursprüngliche Antwort im unteren Teil dieser Antwort, da sie wie unter OS X 10.8.6 angegeben funktioniert und für andere Benutzer von Vorteil sein kann.
Ursprüngliche Antwort:
Ich weiß, dass Sie macOS High Sierra verwenden , und vielleicht können Sie das verwenden, was für mich unter OS X 10.8.6 funktioniert .
Der folgende beispielhafte AppleScript- Code , der in einer Aktion „AppleScript ausführen“ in einem Automator- Dienst-Workflow verwendet wird, dreht die Anzeige um 180°, wenn ich drücke: ⇧⌃⌘F
if running of application "System Preferences" then
quit application "System Preferences"
delay 1
end if
tell application "System Preferences"
reveal anchor "displaysDisplayTab" of pane id "com.apple.preference.displays"
delay 1
tell application "System Events"
tell pop up button "Rotation:" of tab group 1 of window 1 of application process "System Preferences"
if (value) contains "Standard" then
click
click menu item "180°" of menu 1
my clickConfirmButton()
else
click
click menu item "Standard" of menu 1
end if
end tell
end tell
quit
end tell
on clickConfirmButton()
set wasClicked to false
repeat until wasClicked
delay 0.5
tell application "System Events"
try
click button "Confirm" of sheet 1 of window 1 of application process "System Preferences"
set wasClicked to true
end try
end tell
end repeat
end clickConfirmButton
delay
Befehle möglicherweise an Ihr System angepasst werden muss und dass möglicherweise zusätzliche delay
Befehle erforderlich sind oder nicht. Passen Sie die Werte von an und fügen Sie die delay
Befehle nach Bedarf hinzu/entfernen Sie sie.Hinweis: Der beispielhafte AppleScript- Code ist genau das und verwendet keine andere Fehlerbehandlung als die gezeigte und soll nur eine von vielen Möglichkeiten zeigen, eine Aufgabe zu erledigen. Es liegt immer in der Verantwortung des Benutzers, eine geeignete Fehlerbehandlung nach Bedarf/Wunsch hinzuzufügen/zu verwenden .
Automator- Service-Workflow :
Wenn Sie eine andere Sprache verwenden, ändern Sie bitte den Schaltflächennamen in Ihre Sprache.
In script "LG Ultra HD"
bedeutet der Name Ihres Monitors, dies ist nützlich, wenn Sie mehr als 2 Monitore haben, andernfalls können Sie (first window whose name is "LG Ultra HD")
durch ersetzenwindow 1
if running of application "System Preferences" then
quit application "System Preferences"
delay 1
end if
tell application "System Preferences"
reveal anchor "displaysDisplayTab" of pane id "com.apple.preference.displays"
delay 1
tell application "System Events"
tell pop up button "旋转:" of tab group 1 of (first window whose name is "LG Ultra HD") of application process "System Preferences"
if (value) contains "标准" then
click
click menu item "270°" of menu 1
my clickConfirmButton()
else
click
click menu item "标准" of menu 1
end if
end tell
end tell
quit
end tell
on clickConfirmButton()
set wasClicked to false
set i to 10
repeat until wasClicked or i ≤ 0
delay 0.5
tell application "System Events"
try
click button "确认" of sheet 1 of (first window whose name is "LG Ultra HD") of application process "System Preferences"
set wasClicked to true
end try
end tell
set i to i - 1
end repeat
end clickConfirmButton
Ich habe die Lösung von Benutzer 3439894 genommen und sie so modifiziert, dass sie an demselben Fehler arbeitet, den theonlygusti gefunden hat, weil ich auch auf dieses Problem gestoßen bin.
Das folgende Skript ist ein massiver Hack, aber die allgemeine Idee ist, dass der Rotations-Tab manchmal Fenster 1 und manchmal Fenster 2 ist. Um dies zu lösen, habe ich einen Try-Catch-Block verwendet, der nur den ersten versucht und bei Fehlern auch versuche es mit dem zweiten. Fühlen Sie sich frei, dieses Skript zu verbessern, aber ich wollte nur etwas, das funktioniert.
if running of application "System Preferences" then
quit application "System Preferences"
delay 1
end if
tell application "System Preferences"
reveal anchor "displaysDisplayTab" of pane id "com.apple.preference.displays"
delay 1
tell application "System Events"
try
tell pop up button "Rotation:" of tab group 1 of window 2 of application process "System Preferences"
if (value) contains "Standard" then
click
click menu item "270°" of menu 1
my clickConfirmButton()
else
click
click menu item "Standard" of menu 1
end if
end tell
on error errMsg
tell pop up button "Rotation:" of tab group 1 of window 1 of application process "System Preferences"
if (value) contains "Standard" then
click
click menu item "270°" of menu 1
my clickConfirmButton()
else
click
click menu item "Standard" of menu 1
end if
end tell
end try
end tell
quit
end tell
on clickConfirmButton()
set wasClicked to false
repeat until wasClicked
delay 0.5
tell application "System Events"
try
click button "Confirm" of sheet 1 of window 1 of application process "System Preferences"
set wasClicked to true
end try
end tell
end repeat
end clickConfirmButton
Prost, dass du 99 % der Arbeit erledigt hast, user3439894
Getestet auf macOS 11.3 Big Sur.
Basierend auf der Lösung von @Vxider, mit ins Englische übersetzten Menüpunkten.
Sie müssen beide Vorkommen von so ändern, "LG HDR 4K"
dass sie mit dem Namen Ihres Monitors übereinstimmen, wie er im Fenster Systemeinstellungen angezeigt wird:
if running of application "System Preferences" then
quit application "System Preferences"
delay 1
end if
tell application "System Preferences"
reveal anchor "displaysDisplayTab" of pane id "com.apple.preference.displays"
delay 1
tell application "System Events"
tell pop up button "Rotation:" of tab group 1 of (first window whose name is "LG HDR 4K") of application process "System Preferences"
if (value) contains "Standard" then
click
click menu item "90°" of menu 1
my clickConfirmButton()
else
click
click menu item "Standard" of menu 1
end if
end tell
end tell
quit
end tell
on clickConfirmButton()
set wasClicked to false
set i to 10
repeat until wasClicked or i ≤ 0
delay 0.5
tell application "System Events"
try
click button "Confirm" of sheet 1 of (first window whose name is "LG HDR 4K") of application process "System Preferences"
set wasClicked to true
end try
end tell
set i to i - 1
end repeat
end clickConfirmButton
Basierend auf früheren Lösungen habe ich das Skript an macOS Monterey angepasst. Es funktioniert gut mit meinem macOS 12.3.1. Genießen Sie es.
if running of application "System Preferences" then
quit application "System Preferences"
delay 1
end if
tell application "System Preferences"
activate
reveal anchor "displaysDisplayTab" of pane id "com.apple.preference.displays"
delay 1
(*set current pane to pane id "com.apple.preference.displays"*)
delay 1
tell application "System Events"
tell pop up button "Rotation:" of group 1 of window 1 of application process "System Preferences"
if (value) contains "90°" then
delay 1
click
click menu item "Standard" of menu 1
delay 3
display notification "Rotated to Landscape mode"
(*my clickConfirmButton()*)
else
delay 1
click
click menu item "90°" of menu 1
delay 5
display notification "Rotated to Portrait mode"
my clickConfirmButton()
delay 2
end if
end tell
end tell
quit application "System Preferences"
end tell
on clickConfirmButton()
set wasClicked to false
set i to 10
repeat until wasClicked or i ≤ 0
delay 0.5
tell application "System Events"
try
click button "Confirm" of sheet 1 of (first window whose name is "Displays") of application process "System Preferences"
set wasClicked to true
end try
end tell
set i to i - 1
end repeat
end clickConfirmButton
Benutzer3439894
Benutzer3439894
theonlygusti
theonlygusti
Benutzer3439894
Benutzer3439894
tell pop up button "Rotation:" ...
, und dies erfordert möglicherweise auch die Anzeige der Benutzeroberfläche , sodass möglicherweise einactivate
Befehl nach demreveal
Befehl hinzugefügt werden muss . Dies kann auch die Verwendung eines Dienstprogramms eines Drittanbieters erfordern, wenn native Aktionen fehlschlagen.Benutzer3439894
key code 58 using command down
and may be adelay 0.25
after und fügen Sie dies vor demtell pop up button "Rotation:" ...
Befehl hinzu.