Frage

Ich versuche, die gleiche Sache zu triggern, dass das System funktioniert, wenn Sie auf „Anzeigen erkennen“ im „Displays“ Systemeinstellungen Bereich. Gibt es eine Möglichkeit, diese programmatisch zu tun? Mein Ziel ist es, eine LaunchAgent zu erstellen, die bei der Anmeldung tut dies der Bildschirmauflösung bei einer Benutzer Verwirrungen damit zurückgesetzt werden.

War es hilfreich?

Lösung

Sie müssen ein eigenes Core Graphics Routine verwenden, um die Liste aller Displays einschließlich inaktiven zu bekommen, und fordern Sie anschließend eine erneute Prüfung des Busses. Probieren Sie es wie folgt aus:

#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);
  }
 }
}

Und Link zu Application und IOKit.

Andere Tipps

Da die CGDisplayIOServicePort Anruf in OS X 10.9 Mavericks veraltet, kann es besser sein, die IOFramebuffer angebotenen Dienst durch eine entsprechende Abstimmung Aufruf zu erwerben wie folgt:

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);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top