c#多屏显示屏幕顺序问题,防止屏幕掉线多显示界面混乱,

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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值