如何在Windows上使用C++ WinAPI来获取监视器名称
时间: 2024-10-12 19:09:10 浏览: 41
在Windows上,使用C++ WinAPI来获取监视器名称通常涉及到`USER32`库中的`EnumDisplayMonitors`和`GetMonitorInfo`函数。以下是基本步骤:
1. 包含必要的头文件:
```cpp
#include <windows.h>
#include <string>
```
2. 定义一个结构体来存储监视器信息,这里我们使用`MONITORINFOEX`结构:
```cpp
typedef struct tagMONITORINFOEX {
DWORD cbSize;
RECT rcMonitor;
RECT rcWork;
DWORD dwFlags;
HMONITOR hMonitor;
STRINGA szDevice;
} MONITORINFOEX, *LPMONITORINFOEX;
```
3. 编写函数获取监视器列表并提取名称:
```cpp
std::vector<std::wstring> getMonitorNames(HDC hdc = GetDC(nullptr)) {
std::vector<MONITORINFOEX> monitors;
DWORD count = 0;
while (EnumDisplayMonitors(hdc, nullptr, (LPARAM*)&monitors[count++], nullptr)) {}
std::vector<std::wstring> names;
for (size_t i = 0; i < monitors.size(); ++i) {
MONITORINFOEX& mi = monitors[i];
if (mi.szDevice[0] != '\0') { // 检查是否为空字符串
std::wstring name = mi.szDevice;
names.push_back(name);
}
}
ReleaseDC(nullptr, hdc);
return names;
}
```
4. 使用`getMonitorNames`函数并输出监视器名称:
```cpp
void printMonitorNames(const std::vector<std::wstring>& names) {
for (const auto& name : names)
wcout << L"Monitor Name: " << name << endl;
}
```
5. 主函数中调用上述函数并显示结果:
```cpp
int main() {
std::vector<std::wstring> monitors = getMonitorNames();
printMonitorNames(monitors);
}
阅读全文