C# 显示计数(包括禁用的显示)
大家好,stackoverflow.com的新用户。我不知道这里会怎么问这个问题,但我已经尽力了。已经做了很多研究,但找不到一件事来解决这个问题 示例案例: 正在尝试识别Windows 7-10系统中活动和禁用显示的计数 代码GPU[可用性]:C# 显示计数(包括禁用的显示),c#,C#,大家好,stackoverflow.com的新用户。我不知道这里会怎么问这个问题,但我已经尽力了。已经做了很多研究,但找不到一件事来解决这个问题 示例案例: 正在尝试识别Windows 7-10系统中活动和禁用显示的计数 代码GPU[可用性]: private int MonCount; [DllImport("User32.dll")] private static extern bool EnumDisplayDevices( string l
private int MonCount;
[DllImport("User32.dll")]
private static extern bool EnumDisplayDevices(
string lpDevice, int iDevNum,
ref DISPLAY_DEVICE lpDisplayDevice, int dwFlags);
[StructLayout(LayoutKind.Sequential)]
public struct DISPLAY_DEVICE
{
public int cb;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string DeviceName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string DeviceString;
public int StateFlags;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string DeviceID;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string DeviceKey;
public DISPLAY_DEVICE(int flags)
{
cb = 0;
StateFlags = flags;
DeviceName = new string((char)32, 32);
DeviceString = new string((char)32, 128);
DeviceID = new string((char)32, 128);
DeviceKey = new string((char)32, 128);
cb = Marshal.SizeOf(this);
}
}
public void MonitorCheck()
{
DISPLAY_DEVICE lpDisplayDevice = new DISPLAY_DEVICE(0); // OUT
DISPLAY_DEVICE monitor_name = new DISPLAY_DEVICE(0); // OUT
int devNum = 0;
while (EnumDisplayDevices(null, devNum, ref lpDisplayDevice, 0))
{
listBox1.Items.Add("\ndevNum =" + devNum);
listBox1.Items.Add("cb =" + lpDisplayDevice.cb);
listBox1.Items.Add("DeviceID =" + lpDisplayDevice.DeviceID);
listBox1.Items.Add("DeviceKey =" + lpDisplayDevice.DeviceKey);
listBox1.Items.Add("DeviceName =" + lpDisplayDevice.DeviceName.Trim());
listBox1.Items.Add("DeviceString =" + lpDisplayDevice.DeviceString.Trim());
// Show monitor name:
EnumDisplayDevices(lpDisplayDevice.DeviceName, 0, ref monitor_name, 0);
listBox1.Items.Add("Monitor name =" + monitor_name.DeviceString.Trim());
++devNum;
}
}
资料来源:
返回:通过图形适配器信息连接的所有显示器。计数始终为显示适配器中可以连接的监视器数量
代码激活显示:
Screen.AllScreens.Count();
返回:活动监视器计数
问题:
如果GPU适配器有3个输出:
*以上GPU[可用性]代码返回:3
(无论连接了多少个显示器。)
如果连接了2台显示器(例如:笔记本电脑显示器+外部HDMI显示器),但显示器设置设置为:仅笔记本电脑显示器(外部HDMI显示器未激活)->活动显示器代码返回:1
问题:
由于连接了非活动显示器和活动显示器(笔记本电脑显示器+非活动外部显示器),如何返回2
解决方案:
关于如何解决这个问题,没有什么好主意:
Screen.AllScreens.Count()代码>
比较GPU[Availability]输出的输出,并计算所有给出任何值的值,如
monitor\u name.DeviceString.Trim()
(然而,我在装有NVIDIA适配器的台式机上测试了这一点:结果为空,但在笔记本电脑中英特尔HD适配器:输出总是“通用PnP监视器”,因此,这不是解决方案)。愚蠢的我。。。千万不要使用这三种方法来解决问题。(在论坛上,让代码在代码标签中工作似乎非常困难
- 最大可连接显示器
- 当前连接的显示器
- 当前活动的显示器