2016-01-27 9 views
5

Mein Problem ist die Aktivierung eines deaktivierten Monitors mit ChangeDisplaySettingsEx. Ich schätze, es ist kein Hexenwerk, aber nach einigem Graben sieht es immer noch unmöglich aus. Ich habe eine Möglichkeit gefunden, alle sekundären Anzeigen zu deaktivieren, die auf dem Microsoft-Codebeispiel here basieren. Obwohl es nur grundlegende Optimierungen zum Arbeiten brauchte, funktionierte das erneute Anfügen nie. Was ich versuchte zu tun war:Anfügen des deaktivierten Anzeigegeräts mit WinAPI

1. Initialisieren DisplayDevice

BOOL   FoundSecondaryDisp = FALSE; 
DWORD   DispNum = 0; 
DISPLAY_DEVICE DisplayDevice; 
LONG   Result; 
TCHAR   szTemp[200]; 
int    i = 0; 
DEVMODE defaultMode; 
ZeroMemory(&DisplayDevice, sizeof(DisplayDevice)); 
DisplayDevice.cb = sizeof(DisplayDevice); 

2. Finden Sie alle Geräte

while (EnumDisplayDevices(NULL, DispNum, &DisplayDevice, 0)) 
{ 
    ZeroMemory(&defaultMode, sizeof(DEVMODE)); 
    defaultMode.dmSize = sizeof(DEVMODE); 
    //point 3 goes here 
} 

3. Detect freistehende Gerät

if (!(DisplayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) 

4. Aktivieren Sie Gerät

DEVMODE DevMode; 
ZeroMemory(&DevMode, sizeof(DevMode)); 
DevMode.dmSize = sizeof(DevMode); 
DevMode.dmFields = DM_POSITION | DM_PELSWIDTH | DM_PELSHEIGHT; 
DevMode.dmPelsWidth = 1920; 
DevMode.dmPelsHeight = 1080; 
Result = ChangeDisplaySettingsEx(DisplayDevice.DeviceName, &DevMode, NULL, CDS_UPDATEREGISTRY, NULL); 
ChangeDisplaySettingsEx(NULL, NULL, NULL, NULL, NULL); 

Letzter Punkt kehrt DISP_CHANGE_FAILED Code und es ermöglichen keine Anzeige. Hatte jemand ähnliche Erfahrung?

+0

Sie für die Eingabe Dank! Der Monitor ** wurde ** mit 'ChangeDisplaySettingsEx()' deaktiviert **, mein vollständiges Testprogramm deaktiviert sekundäre Anzeigen und sie versuchen, sie wieder zu aktivieren, beide mit 'ChangeDisplaySettingsEx()'. – Artur

Antwort

1

Versuchen Sie, CDS_NORESET zu Ihrem ersten Aufruf von ChangeDisplaySettingsEx hinzuzufügen.

Dies funktioniert:

ChangeDisplaySettingsEx((LPCWSTR)DisplayDevice.DeviceName, &DevMode, NULL, CDS_UPDATEREGISTRY | CDS_RESET, NULL); 
ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL); 

Dies funktioniert auch nicht:

ChangeDisplaySettingsEx((LPCWSTR)DisplayDevice.DeviceName, &DevMode, NULL, CDS_UPDATEREGISTRY | CDS_NORESET, NULL); 
ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL); 

diese nicht funktioniert

ChangeDisplaySettingsEx((LPCWSTR)DisplayDevice.DeviceName, &DevMode, NULL, CDS_UPDATEREGISTRY, NULL); 
ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL); 
+0

Danke für Ihre Antwort! Ich habe Displays wie vor 2 Jahren automatisiert, aber vielleicht werde ich es irgendwann wieder brauchen;) Oder vielleicht braucht es jemand eines Tages! – Artur