Да, вы можете добиться этого без запуска дополнительных приложений. В моей системе я создал два разных сценария. Один скрипт для увеличения разрешения экрана и один для уменьшения разрешения экрана. В моей системе я просто включил оба сценария в качестве команд диктовки, но если вы создаете новую службу через Automator, вы можете назначить этим службам сочетания клавиш.
Во-первых, вот два сценария, с которых я начал.
Это для увеличения разрешения экрана: если мое разрешение экрана уже находится в положении по умолчанию
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"
Запуск этого скрипта приведет к следующему:
Следующий скрипт предназначен для уменьшения разрешения экрана: если разрешение экрана не установлено по умолчанию
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"
Убедившись, что оба скрипта работают правильно, я открыл Automator, создал новую службу для более высокого разрешения экрана и добавил соответствующий скрипт, как показано на следующем рисунке. Я сохранил этот файл как rez_higher.workflow.
Отсюда я открыл системные настройки/клавиатуру/ярлыки/службы. Я нашел эту новую службу, которую я создал, и назначил ей сочетание клавиш
После этого просто выполните те же процедуры, чтобы создать новый рабочий процесс и сервис для более низкого разрешения экрана.
error "System Events got an error: Can’t get tab group 1 of window \"Built-in Retina Display\" of process \"System Preferences\". Invalid index.
он сломан каким-либо обновлением OSX?delay 1
, как показывает wch1zpink (в отличие от @Zade). Кроме того, я позже заметил в Catalina 10.15.7, что мои сочетания клавиш не будут работать в зависимости от того, какое приложение было сфокусировано, когда я их набирал. Мне нужно было предоставить разрешения в «Системных настройках»> «Безопасность и конфиденциальность»> «Автоматизация» (а также «Доступность»). Хотел бы я знать, как это обойти, потому что я не могу знать заранее все приложения, которые у меня могут быть открыты, когда я захочу использовать ярлык. Но это все еще супер полезно! Спасибо.Я написал бесплатный инструмент командной строки displayplacer для изменения разрешения/поворота для рабочих столов с одним или несколькими мониторами. Вы можете активировать «профиль» (пример ниже) с помощью сочетания клавиш с помощью Automator, такого как объяснение wch1zpink, BetterTouchTool и т. Д.
displayplacer 'id:69731906 res:1440x900 scaling:on origin:(0,0) degree:0'
Исправление ответа wch1zpink на macOS 13.0.1 благодаря приложению UI Browser:
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"
Исправление в 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"
Исправление в 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"
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"
С предыдущим кодом номер 1719. Просто изменил номерДобавление еще одного решения в список. Решение Имрона Гамидли приблизило меня к тому, что я хотел, с поведением переключателя.
Вот мой скрипт, который я добавил в качестве команды Raycast, чтобы я мог запускать raycast или назначать сочетание клавиш.
#!/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"
Чтобы иметь одно сочетание клавиш, которое переключается между двумя разрешениями:
/Users/your_username/Library/Services/toggle_display_resolution.workflow
в Automator).Кстати, вам может понадобиться отредактировать «Безопасность и конфиденциальность»> «Доступность». Смотрите ответ .
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 Большое спасибо wch1zpink и Zade , ответы которых привели к моим. Голосуйте за них тоже.
PPS Мне любопытно узнать, могу ли я более легко поделиться этим быстрым действием / сервисом.
Начиная с macOS 12.2.1 с введением ярлыков вам больше не нужно сочетание клавиш. В любом случае, большое спасибо Райану , который лег в основу моего кода. Вот оно:
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
Задержки нужны из-за времени открытия окна, иначе индексация срывается. Если он все еще ломается, просто продлите задержки. Для номера строки, если вы хотите повлиять, например, на 3-й монитор, вместо этого напишите «строка 3». Если вы делаете вторую, чтобы увеличить разрешение, и уже выбран масштаб, вы можете избавиться от этой линии.
РЕДАКТИРОВАТЬ: для MacOS 12.3 измените кнопку 4 на кнопку 5
Это сработало для меня в Monterey 12.3.1, чтобы изменить разрешение на моем втором мониторе из списка. Я перенесу этот скрипт в автомат для изменения разрешения с помощью клавиатуры.
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
Вы можете использовать это приложение под названием SwitcherResX ( http://www.madrau.com/srx_download/download.html ), где у них есть возможность изменить разрешение с помощью сочетания клавиш или в зависимости от используемого вами приложения. У них есть испытание, чтобы попробовать.
За меня это сделало приложение EasyRes (бесплатно в магазине приложений Apple). Я потратил час на сброс NVRAM, отчаянно пытаясь вернуть своему 30-дюймовому дисплею Apple Cinema 2006 года выпуска обратно к полному разрешению, но безрезультатно. Я перезагружался, должно быть, 25 раз. EasyRes позаботился об этом. Спасибо, EasyRes, я был сходить с ума!
Обновление: это не «прилипает» - когда я перезагружаюсь, я возвращаюсь к 1280x800, и мне снова приходится использовать EasyRes, но я перезагружаюсь только раз в пару месяцев, так что это работает.
У кого-нибудь есть AppleScript для Ventura? Пытался использовать Keyboard Maestro и почему-то не смог этого добиться. Есть несколько приложений, в которых нет возможности изменять размер шрифта, и мне бы хотелось, чтобы это было быстро, и я быстро вернул его к значениям по умолчанию.
Обратите внимание, что ответ @ wch1zpink отлично работает, но Big Sur вносит в него некоторые критические изменения и требует пересмотра. Это сработало для меня с внешним дисплеем, поэтому просто замените LG ULTRAWIDE на заголовок в окне.
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
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
риного
/path/to/display_manager.py res 1920 1080 60
:)