EnumDisplayDevices() 获取到的 DeviceName 是 \\\\.\\DISPLAY1,DeviceString是显卡名称;
GetMonitorInfo() 取到的 MONITORINFOEX 也是 \\\\.\\DISPLAY1;
EnumDisplaySettings() 的 dmDeviceName 是 “CDD”;
DisplayConfigGetDeviceInfo() 和 QueryDisplayConfig() 这两个 API 没有,很奇怪,我的win10版本和user32.dll版本都是比较新的。
我想得到的是像Windows显示设置里的显示器名称,比如我的是“DELL XXXX”,除了以上的还有其他办法吗?
如果你希望获取比较新的显示器信息,你可以考虑使用 Microsoft Windows Management Instrumentation (WMI) 来获取显示器的信息。
你可以使用 WMI 的 Win32_DesktopMonitor 类来获取显示器的信息,其中的 MonitorManufacturer 属性代表显示器的制造商名称,MonitorType 属性代表显示器的类型,Caption 属性代表显示器的名称。
如果你想要使用 WMI,你可以使用 WMI 的查询语言(WQL)来查询 Win32_DesktopMonitor 类的信息,例如:
SELECT * FROM Win32_DesktopMonitor
你也可以使用 WMI 的 C++ 接口来访问 Win32_DesktopMonitor 类的信息。下面是一个使用 WMI C++ 接口来获取显示器信息的例子:
#include <iostream>
#include <comdef.h>
#include <Wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
int main()
{
HRESULT hres;
// 初始化 COM
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hres))
{
std::cout << "Failed to initialize COM library. Error code = 0x"
<< std::hex << hres << std::endl;
return 1;
}
// 设置验证 COM 的安全级别
hres = CoInitializeSecurity(
NULL,
-1,
NULL,
NULL,
RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE,
NULL
);
if (FAILED(hres))
{
std::cout << "Failed to initialize security. Error code = 0x"
<< std::hex << hres << std::endl;
CoUninitialize();
return 1;
}
// 获取本地计算机名
char szName[MAX_COMPUTERNAME_LENGTH + 1];
DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1;
GetComputerName(szName, &dwSize);
// 初始化本地