我偶然看到了这的帖子,其中有人想知道他们的显示器的名字使用EnumDisplayDevices。
这正是我想要的,我试着在C++中做一些类似的事情,但是对EnumDisplayDevices的第二个调用似乎没有返回任何东西,我只得到关于显卡的信息。
DISPLAY_DEVICE dd;
memset(&dd, 0, sizeof(DISPLAY_DEVICE));
dd.cb = sizeof(dd);
int i = 0;
while(EnumDisplayDevices(NULL, i, &dd, 0))
{
Log(_T("Device Name: %s Device String: %s"), dd.DeviceName, dd.DeviceString);
if(EnumDisplayDevices(dd.DeviceName, 0, &dd, 0))
{
Log(_T("Monitor Name: %s Monitor String: %s"), dd.DeviceName, dd.DeviceString);
}
i++;
}
我得到的输出是
Device Name: \\.\DISPLAY1 Device String: NVIDIA GeForce 9300 GE
Device Name: \\.\DISPLAYV1 Device String: NetMeeting driver
Device Name: \\.\DISPLAYV2 Device String: RDPDD Chained DD
目标平台是XP,我无法找到监视器名称的任何标准方法。有什么想法吗?
谢谢。
发布于 2012-04-24 17:09:21
在第一次调用到EnumDisplayDevices之后,DispDev.DeviceString包含图形卡的名称。在之后,第二个调用 DispDev.DeviceString包含监视器的名称。
还请参阅此链接以获取此信息的其他方法
BOOL GetMonitorInfo(int nDeviceIndex, LPSTR lpszMonitorInfo) {
BOOL bResult = TRUE;
FARPROC EnumDisplayDevices;
HINSTANCE hInstUserLib;
DISPLAY_DEVICE DispDev;
char szDeviceName[32];
hInstUserLib = LoadLibrary("User32.DLL");
EnumDisplayDevices = (FARPROC)GetProcAddress(hInstUserLib,
"EnumDisplayDevicesA");
if(!EnumDisplayDevices) {
FreeLibrary(hInstUserLib);
return FALSE;
}
ZeroMemory(&DispDev, sizeof(DISPLAY_DEVICE));
DispDev.cb = sizeof(DISPLAY_DEVICE);
// After first call to EnumDisplayDevices DispDev.DeviceString
//contains graphic card name
if(EnumDisplayDevices(NULL, nDeviceIndex, &DispDev, 0)) {
lstrcpy(szDeviceName, DispDev.DeviceName);
// after second call DispDev.DeviceString contains monitor's name
EnumDisplayDevices(szDeviceName, 0, &DispDev, 0);
lstrcpy(lpszMonitorInfo, DispDev.DeviceString);
}
else {
bResult = FALSE;
}
FreeLibrary(hInstUserLib);
return bResult;
}
发布于 2012-04-24 17:01:23
我认为DesktopMonitor可能更适合你想要做的事情。
https://stackoverflow.com/questions/10299619
复制相似问题