c++ - 获取监视器的名称

标签 c++ winapi

我在使用 winapi 检索监视器的名称时遇到了一些麻烦。根据 stackoverflow 上的其他条目,获取监视器名称的正确方法是:

EnumDisplayDevices(nullptr, 0, &oDisplayDevice, 0);

char lpszDeviceName[32];
memcpy(lpszDeviceName, oDisplayDevice.DeviceName, 32);

EnumDisplayDevices(lpszDeviceName, 0, &oDisplayDevice, 0);

char lpszMonitorName[128];
memcpy(lpszMonitorName, oDisplayDevice.DeviceString, 128);

但是,EnumDisplayDevices 第二次返回 FALSE。第一次,DeviceName\\DISPLAY1 并且 DeviceString 是 GPU 供应商。使用 MONITORINFOEX 结构给我的值与 DeviceName 相同。

明确地说,我正在寻找类似“Samsung blah blah”之类的内容,或者屏幕分辨率页面上控制面板中显示的内容。

最佳答案

这似乎为我返回了正确的数据:

#include <Windows.h>
#include <iostream>
#include <string>

int main()
{
    DISPLAY_DEVICE dd;
    dd.cb = sizeof(dd);
    int deviceIndex = 0;
    while(EnumDisplayDevices(0, deviceIndex, &dd, 0))
    {
        std::string deviceName = dd.DeviceName;
        int monitorIndex = 0;
        while(EnumDisplayDevices(deviceName.c_str(), monitorIndex, &dd, 0))
        {
            std::cout << dd.DeviceName << ", " << dd.DeviceString << "\n";
            ++monitorIndex;
        }
        ++deviceIndex;
    }
    return 0;
}

如果您正在为 UNICODE 编译,那么请改用它:

#include <Windows.h>
#include <iostream>
#include <string>

int main()
{
    DISPLAY_DEVICE dd;
    dd.cb = sizeof(dd);
    int deviceIndex = 0;
    while(EnumDisplayDevices(0, deviceIndex, &dd, 0))
    {
        std::wstring deviceName = dd.DeviceName;
        int monitorIndex = 0;
        while(EnumDisplayDevices(deviceName.c_str(), monitorIndex, &dd, 0))
        {
            std::wcout << dd.DeviceName << L", " << dd.DeviceString << L"\n";
            ++monitorIndex;
        }
        ++deviceIndex;
    }
    return 0;
}

这是一个输出示例:

\.\DISPLAY1\Monitor0, Dell U2410(DP)
\.\DISPLAY2\Monitor0, Dell 2407WFP-HC (Digital)

关于c++ - 获取监视器的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20060584/

相关文章:

c++ - 将结构拆分为元组

python - 链接器错误 : C/C++ Extensions for python

c++ - Win32 : Modal dialog not returning focus

windows - 关于 DPI 问题

c++ - VTK 将平移和旋转应用于 vtkImageData

c++ - 是否有用于具有固定运行时确定大小的数组的标准 C++ 类?

c++ - 不可复制类型的 std::initializer_list 替代品

c++ - 目录相对 ZwCreateFile

C++ Visual Studio, 'vc_attributes::YesNoMaybe' : 'enum' type redefinition error

c# - 操纵杆键捕获