C++写完整代码,使用EnumDisplayDevices获取当前windows系统下所有monitor名字
时间: 2024-10-12 15:05:57 浏览: 71
在C++中,为了获取Windows系统下所有显示器(Monitor)的名称,你可以使用`EnumDisplayDevices`函数,这是Windows API的一部分。下面是一个简单的示例,展示如何完成这个任务:
首先,你需要包含必要的头文件,并声明一些辅助结构体:
```cpp
#include <windows.h>
#include <tchar.h>
#include <vector>
// 定义枚举设备类型
typedef enum _DISPLAY_DEVICE_TYPE {
DISPLAY_TYPE_MONITORS = 0x01,
DISPLAY_TYPE_ALL = 0x00,
} DISPLAY_DEVICE_TYPE;
struct DISPLAY_DEVICEA {
DWORD dwSize;
TCHAR cDeviceName[32];
TCHAR cDeviceString[128];
DWORD dwFlags;
DWORD_PTR.dmDriverData;
DISPLAY_DEVICEA* lpNext;
};
```
然后编写一个函数来遍历显示器并存储其名称:
```cpp
std::vector<TCHAR> getMonitorNames() {
std::vector<TCHAR> monitorNames;
DISPLAY_DEVICEA deviceInfo;
DWORD devNum;
std::wstring monitorPath(L"\\\\.\\DISPLAY\\");
// 获取第一个显示器设备
if (EnumDisplayDevices(NULL, 0, &deviceInfo, sizeof(DISPLAY_DEVICEA))) {
do {
if (deviceInfo.dwType == DISPLAY_TYPE_MONITORS) {
// 如果是显示器设备,添加到名字列表
monitorNames.push_back(deviceInfo.cDeviceName);
}
deviceInfo.lpNext->dwSize = sizeof(DISPLAY_DEVICEA); // 更新链表大小
EnumDisplayDevices(monitorPath.c_str(), devNum, &deviceInfo, sizeof(DISPLAY_DEVICEA));
} while (deviceInfo.lpNext != NULL);
}
return monitorNames;
}
```
最后,你可以像这样调用该函数并打印结果:
```cpp
int main() {
std::vector<TCHAR> monitorNames = getMonitorNames();
for (const auto& name : monitorNames) {
wprintf(L"%s\n", name);
}
return 0;
}
```
注意:上述代码需要在支持宽字符的环境下运行,因为`wprintf`用于处理Unicode字符串。如果你的项目配置不支持宽字符,可能需要替换为`printf`或其他相应的函数。
阅读全文