2016-01-27 8 views
5

Mój problem polega na włączeniu wyłączonego monitora z ChangeDisplaySettingsEx. Przypuszczam, że to nie jest nauka o rakietach, ale po jakimś kopaniu wciąż wydaje się niemożliwe. Znalazłem sposób wyłączenia wszystkich wyświetlaczy pomocniczych w oparciu o próbkę kodu Microsoft znalezioną pod numerem here. Podczas gdy do pracy potrzebna była tylko podstawowa zmiana, ponowne dołączanie nigdy nie działało. Co starałem się zrobić to:Dołącz wyłączone urządzenie wyświetlające za pomocą interfejsu WinAPI

1. Inicjowanie 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. Znajdź wszystkie urządzenia

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

3. Wykrywanie wolnostojącego urządzenia

if (!(DisplayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) 

4. Włącz urządzenie

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

ostatni punkt zwrotów kod DISP_CHANGE_FAILED i to nie pozwoli wyświetlacz. Czy ktoś miał podobne doświadczenia?

+0

Dziękuję za wejście! Monitor ** został ** wyłączony za pomocą 'ChangeDisplaySettingsEx()', mój pełny program testowy wyłącza wyświetlanie wtórne i próbuje je przywrócić, obie używając 'ChangeDisplaySettingsEx()'. – Artur

Odpowiedz

1

Spróbuj dodać CDS_NORESET do pierwszego połączenia z ChangeDisplaySettingsEx.

Ten działa:

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

ten nie działa:

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

Ten też nie działa:

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

Dzięki za odpowiedź! Automatyzowałem wyświetlacze jak 2 lata temu, ale może będę potrzebował jeszcze raz;) A może ktoś będzie tego potrzebował! – Artur

Powiązane problemy