I ’ m尝试触发系统在单击时所做的相同操作“在“中检测显示”显示”系统首选项窗格。有没有办法做到这一点编程?我的目标是创建一个LaunchAgent,在登录时执行此操作,以便在用户弄乱它时重置显示分辨率。以编程方式触发“检测显示”。
2
A
回答
3
您将需要使用专用的CoreGraphics例程来获取所有显示(包括非活动显示)的列表,然后请求重新扫描总线。试试这样:
#include <IOKit/IOKitLib.h>
#include <IOKit/IOTypes.h>
CGDisplayErr CGSGetDisplayList(CGDisplayCount maxDisplays,
CGDirectDisplayID * onlineDspys,
CGDisplayCount * dspyCnt);
static void DetectDisplays()
{
CGDirectDisplayID displays[8];
CGDisplayCount dspCount = 0;
if (CGSGetDisplayList(8, displays, &dspCount) == noErr)
{
for(int i = 0; i < dspCount; i++)
{
io_service_t service = CGDisplayIOServicePort(displays[i]);
if (service)
IOServiceRequestProbe(service, kIOFBUserRequestProbe);
}
}
}
并链接到ApplicationServices和IOKit。
4
由于CGDisplayIOServicePort
呼叫已经在OS X 10.9小牛被弃用,它可能是更好的通过适当的匹配调用像这样获得IOFramebuffer的服务:
void triggerDetectDisplays()
{
// loop over all IOFramebuffer services
CFMutableDictionaryRef matchingDict = IOServiceMatching("IOFramebuffer");
mach_port_t masterPort;
IOMasterPort(MACH_PORT_NULL, &masterPort);
io_iterator_t serviceIterator;
IOServiceGetMatchingServices(masterPort, matchingDict, &serviceIterator);
io_service_t obj = IOIteratorNext(serviceIterator);
while (obj)
{
kern_return_t kr = IOServiceRequestProbe(obj, 0);
obj = IOIteratorNext(serviceIterator);
}
}
相关问题
- 1. 以编程方式检测iPad是否具有Retina显示屏?
- 2. 以编程方式触发SlideToggle jquery
- 3. 如何以编程方式触发`valueChanges`?
- 4. 以编程方式触发UIAlertController的UIAlertAction
- 5. 以编程方式触发didEndOnExit
- 6. jQuery - 以编程方式触发事件
- 7. 如何以编程方式触发OnTouchListener
- 8. 以编程方式触发segue
- 9. 以编程方式触发ControlValueAccessor的registerChange?
- 10. 以编程方式触发ResponsiveSlides.js
- 11. 以编程方式触发MouseLeftButtonDown事件
- 12. 以编程方式触发listener.GetContext()
- 13. 以编程方式检测VMWare
- 14. 以编程方式检测类参数
- 15. 以编程方式检测SQL Server版
- 16. 以编程方式触发单元测试的UI事件
- 17. 如何以编程方式实现“显示触摸”?
- 18. 以编程方式显示桌面
- 19. 显示进度条 - 以编程方式
- 20. 以编程方式显示主视图
- 21. 以编程方式显示iPhone键盘
- 22. 以编程方式突出显示UIBarButtonItem
- 23. 以编程方式显示dijit /菜单
- 24. 以编程方式显示RowDetails
- 25. 以编程方式显示options.xul
- 26. 如何以编程方式显示UITableView?
- 27. 以编程方式发布HTML表单并显示回复
- 28. BlackBerry - 以编程方式显示打字模式指示灯
- 29. 以编程方式'触摸'UITableViewCell?
- 30. Android SwitchCompat:OnClick以编程方式检查是否应该触发开关
对不起我花了这么长的回应,我必须到达我可以测试的地方。它的工作,但我建议一些变化。首先,添加'#include'行,它允许您将'CGSGetDisplayList'(删除其声明)更改为'CGGetOnlineDisplayList'并在Xcode中获得代码完成。 –
2010-01-20 15:25:09
好,太好了。我没有任何外部显示器要测试,并且不确定是否可以使用CGGetOnlineDisplayList而不是CGSGetDisplayList。我知道CGSGetDisplayList返回所有显示是否在线(它在我的MacBook Pro上返回4个显示),而CGGetOnlineDisplayList只返回一个。 如果它与CGGetOnlineDisplayList一起使用,那么最好避免使用私有API;) – 2010-01-20 17:39:53