c#多屏显示屏幕顺序问题,防止屏幕掉线多显示界面混乱,
问题:多窗体多屏幕显示时,当有屏幕掉线时,所有显示器的顺序会混乱。
c#管理可用屏幕的类:Screen
原文:C#获取显示器屏幕数量 控制winform显示到哪一个屏幕
获取当前系统连接的屏幕数量: Screen.AllScreens.Count();
获取当前屏幕的名称:string CurrentScreenName = Screen.FromControl(this).DeviceName;
获取当前屏幕对象:Screen CurrentScreen = Screen.FromControl(this);
获取当前鼠标所在的屏幕:Screen CurrentScreen = Screen.FromPoint(new Point(Cursor.Position.X, Cursor.Position.Y));
win32硬件管理API wmi (windows 系统对象管理的树形数据库)
如下:查询显示起的设备id
public string GetDisplayManufacturer()
{
string str = “”;
ManagementObjectSearcher mos = new ManagementObjectSearcher("Select * from Win32_DesktopMonitor ");
foreach (ManagementObject mo in mos.Get())
{
str += mo["DeviceID"].ToString();
}
return str;
}
3 .EnumDisplayDevices API接口()
List<WinApi.DISPLAY_DEVICE> devices = new List<WinApi.DISPLAY_DEVICE>();
List screens = new List();
bool error = false;
//Here I am listing all DisplayDevices (Monitors)
for (int devId = 0; !error; devId++)
{
try
{
WinApi.DISPLAY_DEVICE device = new WinApi.DISPLAY_DEVICE();
device.cb = Marshal.SizeOf(typeof(WinApi.DISPLAY_DEVICE));
error = !WinApi.User_32.EnumDisplayDevices(null, devId, ref device, 0);
if ((device.StateFlags & WinApi.DisplayDeviceStateFlags.AttachedToDesktop) == WinApi.DisplayDeviceStateFlags.AttachedToDesktop)
{
devices.Add(device);
}
}
catch (Exception)
{
error = true;
}
}
预想解决方法:
使用Screen查询设备,再使用其他方法查询设备,使用显示器的的 物理序列号排序,对应Screen也排序,这样显示器的顺序就固定不变了,(windows系统设置的多屏的效果,原理不知),实际出现的问题,二者之间没有统一的关联量,无法对Screen做排序,
Screen的显示器名称是从显卡的输出扣顺序分配的,但是好像出现了顺序紊乱的情况,还在测试。。。。。
如果有大佬有解决的方法欢迎留言。
目前的实现的效果源码:(https://download.csdn.net/download/qq_37804024/12513096)