使用 EnumDisplayDevices 获取监视器的名称
Getting the monitor's name with EnumDisplayDevices
我遇到了这篇文章,其中有人想使用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,我无法找到任何标准方法来查找显示器名称。有什么想法吗?
谢谢。
在第一次调用 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;
}
我认为Win32_DesktopMonitor可能更适合您要做的事情。
相关文章:
- 用于C++代码的 API 监视器类型定义 (XML)
- 将单个字符串/字符输入串行监视器
- 获取窗口监视器的唯一标识符
- C++端口监视器 (mfilemon.dll) RDP 虚拟通道代码未执行
- 为什么赫伯·萨特(Herb Sutter)的监视器示例采用"T"而不是"T&"或"T&&"?
- 如何检测监视器是否为投影仪
- 通过编程为多个监视器供电
- Arduino Uno 串行监视器不会打印整个输出;如何解决?
- 从全局对象构造函数停止监视器计时器
- 为什么在切换监视器时会意外地表现出DWMGETWINDOWATTRIBUTE,而DWMWA_EXTEDDEND_FRAM
- 在特定监视器上运行进程
- 使用串行监视器 arduino 控制 LED
- 如何制作新连接监视器主屏幕
- C++11 监视器类,测试应用程序不想退出
- 获取特定监视器的处理程序以在其中放置弹出窗口
- 将 HID 触摸设备与 Pnp 监视器关联
- 如何在 Windows 10 上检测辅助监视器的本机屏幕分辨率或缩放因子
- Windows资源监视器使用哪些Win32函数来检测已终止进程的磁盘和网络活动
- 奇怪的脉冲音频监视器设备行为
- 从其句柄 (HMONITOR) 获取监视器索引