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);
}
}
}
И ссылка на ApplicationsServices и IOKit.
4
Поскольку CGDisplayIOServicePort
вызов устаревшим в OS X 10.9 Mavericks, это может быть лучше приобрести услугу 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. Как запускать OnTouchListener программно
- 2. Как программно запускать Finder?
- 3. Обнаружение программно установленного приложения
- 4. Обнаружение Uptime сервера программно
- 5. Обнаружение UPX программно
- 6. Сетевое обнаружение программно
- 7. Создавать/запускать командный файл программно
- 8. Как запускать действие UIButton программно
- 9. Программно обнаружение/изменение пользовательских клавиатур
- 10. Обнаружение «уровня шума» аудиозаписи программно
- 11. Программно обнаружение PEAR в PHP
- 12. Несколько дисплеев в Pygame
- 13. dimension.xml для нескольких дисплеев
- 14. Использование различных дисплеев opengl
- 15. Несколько дисплеев в SDL2
- 16. Как запускать программные тесты Microsoft.VisualStudio.TestTools.UnitTesting программно?
- 17. Node.js + Loopback: программно запускать удаленные крючки
- 18. Можно ли программно запускать Flash-приложение?
- 19. Как программно запускать проверку модели EMF?
- 20. Можно ли запускать событие onbeforeunload программно?
- 21. Каким образом можно запускать ComponentListener программно?
- 22. Как программно запускать событие mx: Button click?
- 23. Как программно запускать «входное» событие без jQuery?
- 24. Невозможно запускать mouseenter программно в MooTools
- 25. Как программно запускать/останавливать транскодирование потока FFMPEG
- 26. Программно запускать элементы панели управления ReportViewer
- 27. Программно запускать/останавливать запись в Kinect Studio
- 28. Программно запускать UIPress с помощью tvOS
- 29. Как запускать задачи Grunt синхронно (программно)?
К сожалению он взял меня так долго, чтобы ответить, я пришлось добраться туда, где я мог проверить это. Это сработало, но я рекомендую пару изменений. Во-первых, добавьте строку '#include', которая позволяет вам изменить 'CGSGetDisplayList' (удаление его декларации) на' CGGetOnlineDisplayList' и получить код в Xcode. –
Хорошо, отлично. У меня не было никаких внешних дисплеев для тестирования, и я не был уверен, можно ли использовать CGGetOnlineDisplayList вместо CGSGetDisplayList. Я знаю, что CGSGetDisplayList возвращает все отображения, независимо от того, находятся они в сети или нет (он возвращал 4 дисплея на моем MacBook Pro), тогда как CGGetOnlineDisplayList возвращал только один. Если это работает с CGGetOnlineDisplayList, то лучше избегать частного API;) –