我正在尝试编写一个小的 Objective-C 命令行工具来调整给定显示器的旋转。
可悲的是,我在 Apple 的文档中找不到任何说明如何更改旋转的参考(除了获取它)。我认为它必须通过使用来完成,CGDisplayModeRef
但我不知道如何。任何帮助,将不胜感激!
我正在尝试编写一个小的 Objective-C 命令行工具来调整给定显示器的旋转。
可悲的是,我在 Apple 的文档中找不到任何说明如何更改旋转的参考(除了获取它)。我认为它必须通过使用来完成,CGDisplayModeRef
但我不知道如何。任何帮助,将不胜感激!
摘自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
.
使用适用于 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