我試圖以編程方式在我的監視器上獲取信息。循環的內容現在並不重要,它們只包含在滿足循環條件時將打印的調試語句。現在,外部循環代碼執行三次,而內部循環代碼從未被訪問,這意味着(內部)循環的while條件從不爲真,這意味着調用失敗。EnumDisplayDevices函數不適合我
我在這裏的問題是,在Windows API稱,關於此功能:
爲了獲得一個顯示器上lpDevice,第一個電話EnumDisplayDevices>設置爲NULL信息。然後調用EnumDisplayDevices並將lpDevice設置爲DISPLAY_DEVICE.DeviceName>,從第一次調用EnumDisplayDevices並將iDevNum設置爲零。然後> DISPLAY_DEVICE.DeviceString是監視器名稱。
...但即使做完了它所說的,第二個EnumDisplayDevices調用總是失敗?任何見識?
此外,我正在做這個作爲服務級別的應用程序在Windows XP和Windows 7上獲得相同的結果。當我嘗試打印出dd.DeviceName時,它給了我一個地址(例如:0x12cfa4),但是這必須是函數在第二次調用時所期待的,因爲MSDN只是傳遞顯示設備指針並將.DeviceName附加到它...
C++(使用Qt),使用Windows API/MSDN調用。
DISPLAY_DEVICE dd;
dd.cb = sizeof(DISPLAY_DEVICE);
DWORD deviceNum = 0;
while(EnumDisplayDevices(NULL, deviceNum, &dd, 0)){
qWarning() << "We've entered the outer loop.";
while(EnumDisplayDevices(dd.DeviceName, 0, &dd, 0)){
qWarning() << "We've entered the inner loop.";
}
deviceNum++;
}
我剛剛寫完很多相同的東西。別名是問題。 – arx 2012-03-01 22:06:43
不知道這是自發布代碼以來發生了什麼變化,但我發現在MSVC2015中,我必須使用%S而不是%s,因爲DeviceName,DeviceString等是WCHAR數組,我猜想包含/ 0數據在每秒字符中。 – scone 2016-02-09 00:24:17