프로그래밍 방식으로 내 모니터에 대한 정보를 얻으려고합니다. 루프의 내용은 현재 중요하지 않으며 루프 조건이 충족 될 때 인쇄되는 디버그 문만 포함합니다. 바로 지금, 외부 루프 코드는 세 번 실행되고 내부 루프 코드는 결코 액세스되지 않습니다. 즉, (내부) 루프의 while 조건이 참이 아니라는 의미입니다. 즉 호출이 실패합니다. 여기EnumDisplayDevices 함수가 작동하지 않습니다.
내 문제는 Windows API는이 기능에 대해 말한다이다 :
은 디스플레이 모니터에 NULL로 설정 lpDevice와 먼저 통화 EnumDisplayDevices을> 정보를 얻으려면. 그런 다음 첫 번째 호출에서 EnumDisplayDevices로, iDevNum을 0으로 설정하여 lpDevice를 DISPLAY_DEVICE.DeviceName>으로 설정하여 EnumDisplayDevices를 호출합니다. 그런 다음> 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
코드를 게시 한 이후로 변경된 사항인지 잘 모르겠지만 MSVC2015에서 DeviceName, DeviceString 등이 WCHAR 배열이므로 % s 대신 % S를 사용해야한다는 것을 알았습니다./0 두 번째 문자마다 데이터. – scone