5

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

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

4

2 回答 2

4

摘自https://github.com/CdLbB/fb-rotateIOKit -尽管这种行为对我来说有点奇怪,但它似乎可以完成这项工作。简而言之:

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.

于 2013-06-26T13:52:09.340 回答
0

使用适用于 OS El Capitan (10.11.6) 所以 YMMV 的 applescript 破解了一个足够好的解决方案。直接使用 Quicksilver 或通过 Quicksilver 触发器很容易启动它,并且大约需要物理旋转和调整显示器所需的时间。希望这对某人有帮助!

此applescript 将目标显示器“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
于 2018-12-11T20:50:06.757 回答