大家好,大家都是stackoverflow.com的新手。我不知道怎么问这个问题,但要尽我最大的努力。做了,做了不少关于课题的研究,却找不到一件事来解决问题。
示例:试图识别Windows 7-10系统中活动和禁用显示的计数。
代码GPUAvailability
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;
}
}来源:如何获取C#监视器名称
返回:所有可附加的监视器由图形适配器信息。计数总是显示适配器中可以附加多少监视器。
代码活动显示:
Screen.AllScreens.Count();返回:活动监视器计数。
问题:
如果GPU有3个输出:*上面的GPUAvailability代码返回:3(不管有多少显示器附加到它。)
如果附加了2个监视器(例如:膝上型显示器+外部HDMI监视器),但显示设置设置为:仅为:膝上型显示器(外部HDMI不是活动的) ->活动显示代码返回:1
问题
如何返回2,因为有非活动显示和活动显示器附加(膝上型电脑监视器+非活动外部监视器)?
解决方案
如何解决这一问题几乎没有什么想法:
Screen.AllScreens.Count();来激活它们思想:比较GPUAvailability输出的输出和计数所有作为monitor_name.DeviceString.Trim()的值(然而,我已经在拥有NVIDIA适配器的桌面上测试了这一点:结果为空,但在笔记本英特尔高清适配器:输出总是“通用PnP-监视器”,所以,这不是解决方案)。
发布于 2016-05-28 18:02:54
愚蠢的我。永远不要使用这三种方法来解决问题。(在论坛上,要让代码在代码标记中工作似乎非常困难。
解决方案:
嗯,似乎无法将我的代码附加到堆栈溢出回复中,所以:
巴斯丁:监测器计数
https://stackoverflow.com/questions/37501512
复制相似问题