使用Xcode以编程方式在Mac OS上更改显示旋转

时间:2013-06-25 18:46:13

标签: objective-c macos quartz-graphics

我正在尝试编写一个小的Objective-C命令行工具来调整给定显示的旋转。

可悲的是,我在Apple的文档中找不到任何关于如何更改旋转的参考(除了获取它)。我认为必须使用CGDisplayModeRef来完成,但我无法知道如何使用{{1}}。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

使用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