[C/C++] Zweiten Monitor de/aktivieren

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von MasterJulian, 6. Mai 2012 .

Schlagworte:
  1. 6. Mai 2012
    Zuletzt bearbeitet: 6. Mai 2012
    Zweiten Monitor de/aktivieren

    Ich arbeite nun seit ein paar Wochen permanent mit einem zweiten Monitor. Jedoch gibt es Situationen in denen ich den Monitor de/aktivieren möchte. Ausschalten reicht nicht. Ich hab das So versucht (diverse Quelle im Internet bestätigen mein Vorgehen):
    Code:
    void deactivateSecondScreen()
    {
     DEVMODE DevMode;
     DISPLAY_DEVICE device;
    
     memset(&device, 0, sizeof(DISPLAY_DEVICE));
     device.cb = sizeof(device);
    
     memset(&DevMode, 0, sizeof(DevMode));
     DevMode.dmPosition.x = 0;
     DevMode.dmPosition.y = 0;
     DevMode.dmPelsHeight = 0;
     DevMode.dmPelsWidth = 0;
     DevMode.dmSize = sizeof(DevMode);
     EnumDisplayDevices(NULL,0,&device,0); //Display 1 is secondary Screen according to Desk.cpl
     printf("Change Display: %s\n",device.DeviceName);
     if(ChangeDisplaySettingsEx((LPSTR)device.DeviceName,&DevMode,NULL,CDS_UPDATEREGISTRY,NULL) == DISP_CHANGE_SUCCESSFUL) printf("Success\n");
     else printf("Failed\n");
    }
    Wenn der Code ausgeführt wird, werden beide Monitore kurz schwarz und beiden gehen dann wieder an. Als Meldung bekomme ich
    "Change Display: \\.\DISPLAY1
    Success"
    Jemand ne Idee was ich falsch mache? Der Code aus der MSDN: Enumeration and Display Control (Windows)
    funktioniert auch nicht (Result = -858993460).
    PS: Kommentare wie "nutz doch UltraMon" könnt ihr euch schenken.
    //edit: Ich verwende VS2012 und W7 X64
     
  2. 6. Mai 2012
    AW: Zweiten Monitor de/aktivieren

    Wahrscheinlich musst du noch die Strukturvariable dmFields setzen, damit er weiß welche Eigenschaften er übernehmen soll.
    ->
    Xtreme Visual Basic Talk - View Single Post - ChangeDisplaySettingsEx to turn off secondary monitor

    Mfg Rushh0ur
     
    1 Person gefällt das.
  3. 6. Mai 2012
    AW: Zweiten Monitor de/aktivieren

    Mist das hab ich vergessen mit raus zu kopieren (hab unwichtigen Code entfernt, dabei wohl auch die Fields zeile erwischt). Fields wird natürlich gesetzt, sonst passiert gar nichts.
    Code:
    void deactivateSecondScreen()
    {
     DEVMODE DevMode;
     DISPLAY_DEVICE device;
    
     memset(&device, 0, sizeof(DISPLAY_DEVICE));
     device.cb = sizeof(device);
    
     memset(&DevMode, 0, sizeof(DevMode));
     DevMode.dmPosition.x = 0;
     DevMode.dmPosition.y = 0;
     DevMode.dmPelsHeight = 0;
     DevMode.dmPelsWidth = 0;
     DevMode.dmSize = sizeof(DevMode);
     DevMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_POSITION;
    
     EnumDisplayDevices(NULL,0,&device,0); //Display 1 is secondary Screen according to Desk.cpl
     printf("Change Display: %s\n",device.DeviceName);
     if(ChangeDisplaySettingsEx((LPSTR)device.DeviceName,&DevMode,NULL,CDS_UPDATEREGISTRY,NULL) == DISP_CHANGE_SUCCESSFUL) printf("Success\n");
     else printf("Failed\n");
    }
    Wie gesagt kurzes "Flackern" (beide Monitore gehen kurz aus und an) aber mehr nicht.
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.