マルチディスプレイの識別番号をC#から取得できますか？


Windows 7の環境で複数のディスプレイを接続した時、識別番号が割り振られます。  
この識別番号を、C#から取得する方法は有るのでしょうか？




ディスプレイ番号は単純に接続されているデバイスの順序ですので、`System.Windows.Forms.Screen.AllScreens`やWMIの`Win32_PnPEntity`で返されるモニターのリストに1から順に番号を振ればいいものと思います。

## System.Windows.Formsを使用する場合

[code]

    foreach (var s in System.Windows.Forms.Screen.AllScreens)
    {
        Console.WriteLine("{0} {1}", s.DeviceName, s.Bounds);
    }
    
[/code]

## System.Management (WMI)を使用する場合

[code]

    using (var mos = new ManagementObjectSearcher("root\\cimv2", "SELECT * FROM Win32_PnPEntity WHERE Service=\"monitor\""))
    {
        foreach (var m in mos.Get())
        {
            Console.WriteLine(m);
            foreach (var p in m.Properties)
            {
                Console.WriteLine("    - {0}: {1}", p.Name, p.Value);
            }
        }
    }
    
[/code]




ディスプレイ番号は単純に接続されているデバイスの順序ですので、`System.Windows.Forms.Screen.AllScreens`やWMIの`Win32_PnPEntity`で返されるモニターのリストに1から順に番号を振ればいいものと思います。

## System.Windows.Formsを使用する場合

[code]

    foreach (var s in System.Windows.Forms.Screen.AllScreens)
    {
        Console.WriteLine("{0} {1}", s.DeviceName, s.Bounds);
    }
    
[/code]

## System.Management (WMI)を使用する場合

[code]

    using (var mos = new ManagementObjectSearcher("root\\cimv2", "SELECT * FROM Win32_PnPEntity WHERE Service=\"monitor\""))
    {
        foreach (var m in mos.Get())
        {
            Console.WriteLine(m);
            foreach (var p in m.Properties)
            {
                Console.WriteLine("    - {0}: {1}", p.Name, p.Value);
            }
        }
    }
    
[/code]

