Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Программное изменение поворота дисплея в Mac OS с помощью Xcode

Автор вопроса: NicolasОтветов: 2

Я пытаюсь написать небольшой инструмент командной строки Objective-C, который регулирует поворот данного дисплея.

К сожалению, я не могу найти ссылку в документации Apple, в которой рассказывается, как изменить вращение (помимо его получения). Я думаю, что это нужно сделать с помощью CGDisplayModeRef, но я не могу понять, как это сделать. Любая помощь будет оценена по достоинству!

macosobjective-cquartz-graphics

Ответы

Ответ 1 · рейтинг 4 · Nicolas

Извлечено из https://github.com/CdLbB/fb-rotate - кажется, IOKit может сделать работа, хотя поведение кажется мне немного странным. В двух словах:

io_service_t service = CGDisplayIOServicePort(myDisplayID); //IOKit Handle (get myDisplayID yourself)
IOOptionBits options = (0x00000400 | (kIOScaleRotate90)  << 16) //Some undocumented hex'ing
IOServiceRequestProbe(service, options); //Set rotation to display

Не забудьте поставить ссылку на IOKit.

Ответ 2 · codeanpeace

Взломал достаточно хорошее решение, используя applescript, который работает на OS El Capitan (10.11.6), поэтому YMMV. Это легко запустить с помощью Quicksilver напрямую или с помощью триггера Quicksilver, и это занимает примерно столько же времени, сколько требуется для физического поворота и настройки монитора. Надеюсь, это поможет кому-то!

Этот яблочный скрипт переключает целевой дисплей "DELL U2414H" в портретный режим с поворотом на 270 градусов. Обратите внимание, что строка "DELL U2414H" взята из заголовка окна, представляющего указанный дисплей в разделе "Системные настройки" > "Дисплеи". Не уверен, что произойдет, если он запустится, когда есть два дисплея одной марки и модели - не стесняйтесь сообщать о результатах. Легкими потенциальными улучшениями было бы заставить его проверять состояние и переключаться между двумя наиболее часто используемыми ориентациями, но нехватка времени и документации означала, что это было достаточно хорошо для моего варианта использования как есть. ¯\_(ツ)_/¯

tell application "System Preferences"
    activate
end tell

tell application "System Events"
    delay 1
    click UI element "Displays" of scroll area 1 of window "System Preferences" of application process "System Preferences"

    delay 1
    click window "DELL U2414H" of application process "System Preferences"

    delay 1
    click pop up button 2 of tab group 1 of window "DELL U2414H" of application process "System Preferences"

    -- select 270° for portrait, for landscape replace 4 with "Standard" (with quotes)
    delay 1
    click menu item 4 of menu 1 of pop up button 2 of tab group 1 of window "DELL U2414H" of application process "System Preferences"

    -- click the "Confirm" button, not necessary for "Standard" orientation
    delay 5
    click UI element "Confirm" of sheet 1 of window "DELL U2414H" of application process "System Preferences"
end tell

tell application "System Preferences"
    quit
end tell

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы