2016-01-27 41 views
5

ile ekle Sorunum ChangeDisplaySettingsEx numaralı bir devre dışı bırakılmış monitöre olanak veriyor. Sanırım roket bilimi değil, kazıdan sonra hala imkansız görünüyor. Microsoft kod örneğini temel alan tüm ikincil ekranları here bulunduğunu devre dışı bırakmanın bir yolunu buldum. Çalışmak için sadece basit ayarlamaya ihtiyaç duyulurken, yeniden bağlama asla işe yaramadı. Ne Yapmaya çalıştığım oldu:Engelli görüntü aygıtını WinAPI

1. Başlatma 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. tüm cihazlar

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

3. Algılama müstakil cihazı bulun

if (!(DisplayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) 

4. DISP_CHANGE_FAILED kod cihazını

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

Son nokta döner etkinleştirme ve herhangi ekranı sağlamaz. Kimsenin benzer bir deneyimi var mıydı?

+0

girişi için teşekkür ederiz! Monitör **, "ChangeDisplaySettingsEx()" ile devre dışı bırakıldı, tam test programım ikincil ekranları devre dışı bıraktı ve bunları her ikisini de 'ChangeDisplaySettingsEx() 'kullanarak etkinleştirmeye çalıştı. – Artur

cevap

1

ChangeDisplaySettingsEx ilk çağrınıza CDS_NORESET eklemeyi deneyin.

Bu seferki çalışır:

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

Bu seferki işe ETMEZ:

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

Bu seferki da işe ETMEZ:

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

Cevabınız için teşekkürler! 2 yıl önce ekranları otomatikleştiriyordum ama belki bir süre sonra tekrar ihtiyacım olacak;) Ya da belki bir gün ona ihtiyacım olacak! – Artur

İlgili konular