在 C++ 中以编程方式识别笔记本电脑显示器与外部显示器
Identify laptop display vs external monitor programmatically in C++
我是我公司的 IT 人员,我们的许多用户对计算机知之甚少。我们有多个带码头和外部显示器的停靠站。因此,用户在移动到不同的站点时会遇到显示问题。监视器调整大小、复制或更改频率。
我使这个易于使用的一键式工具在控制台 C++ exe 中调整显示器大小。我 运行 涉及的问题是识别显示器是笔记本电脑显示器还是外接显示器。这很重要,因为我们所有的外接显示器都是 1920 x 1080,但我们的一些笔记本电脑是 1920 x 1200。
main.cpp:
#include <Windows.h>
#include <string>
#include <iostream>
int main()
{
DEVMODE devmode;
SetDisplayConfig(0, NULL, 0, NULL, SDC_TOPOLOGY_EXTEND | SDC_APPLY);
//long result = ChangeDisplaySettings(&devmode, 0);
DISPLAY_DEVICE displayDevice;
displayDevice.cb = sizeof(displayDevice);
int deviceIndex = 0;
while (EnumDisplayDevices(0, deviceIndex, &displayDevice, 0))
{
std::wstring deviceName = displayDevice.DeviceName;
int monitorIndex = 0;
while (EnumDisplayDevices(deviceName.c_str(), monitorIndex, &displayDevice, 0))
{
devmode.dmPelsWidth = 1920;
devmode.dmPelsHeight = 1080;
devmode.dmDisplayFrequency = 60;
devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;
devmode.dmSize = sizeof(DEVMODE);
long result = ChangeDisplaySettingsEx(deviceName.c_str(), &devmode, NULL, NULL, 0);
++monitorIndex;
}
++deviceIndex;
}
return 0;
}
也许您正在寻找 displayDevice.StateFlags
字段中的 DISPLAY_DEVICE_REMOVABLE
标志?
Value
Meaning
DISPLAY_DEVICE_REMOVABLE
The device is removable; it cannot be the primary display.
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-display_devicea
我是我公司的 IT 人员,我们的许多用户对计算机知之甚少。我们有多个带码头和外部显示器的停靠站。因此,用户在移动到不同的站点时会遇到显示问题。监视器调整大小、复制或更改频率。
我使这个易于使用的一键式工具在控制台 C++ exe 中调整显示器大小。我 运行 涉及的问题是识别显示器是笔记本电脑显示器还是外接显示器。这很重要,因为我们所有的外接显示器都是 1920 x 1080,但我们的一些笔记本电脑是 1920 x 1200。
main.cpp:
#include <Windows.h>
#include <string>
#include <iostream>
int main()
{
DEVMODE devmode;
SetDisplayConfig(0, NULL, 0, NULL, SDC_TOPOLOGY_EXTEND | SDC_APPLY);
//long result = ChangeDisplaySettings(&devmode, 0);
DISPLAY_DEVICE displayDevice;
displayDevice.cb = sizeof(displayDevice);
int deviceIndex = 0;
while (EnumDisplayDevices(0, deviceIndex, &displayDevice, 0))
{
std::wstring deviceName = displayDevice.DeviceName;
int monitorIndex = 0;
while (EnumDisplayDevices(deviceName.c_str(), monitorIndex, &displayDevice, 0))
{
devmode.dmPelsWidth = 1920;
devmode.dmPelsHeight = 1080;
devmode.dmDisplayFrequency = 60;
devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;
devmode.dmSize = sizeof(DEVMODE);
long result = ChangeDisplaySettingsEx(deviceName.c_str(), &devmode, NULL, NULL, 0);
++monitorIndex;
}
++deviceIndex;
}
return 0;
}
也许您正在寻找 displayDevice.StateFlags
字段中的 DISPLAY_DEVICE_REMOVABLE
标志?
Value | Meaning |
---|---|
DISPLAY_DEVICE_REMOVABLE | The device is removable; it cannot be the primary display. |
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-display_devicea