当前位置: 代码迷 >> C# >> 关于EnumDisplayDevices(null, DispNum, ref DisplayDevice, 零)
  详细解决方案

关于EnumDisplayDevices(null, DispNum, ref DisplayDevice, 零)

热度:421   发布时间:2016-04-28 08:40:15.0
关于EnumDisplayDevices(null, DispNum, ref DisplayDevice, 0)
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        [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);
            }
        }

        [DllImport("User32.dll", CharSet = CharSet.Auto)]
        private static extern bool EnumDisplayDevices(string lpDevice, int iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, int dwFlags);

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int DispNum = 0;
            DISPLAY_DEVICE DisplayDevice;
            DisplayDevice = new DISPLAY_DEVICE();
            DisplayDevice.cb = Marshal.SizeOf(typeof(DISPLAY_DEVICE));
            while (EnumDisplayDevices(null, DispNum, ref DisplayDevice, 0))
            {
                listBox1.Items.Add(Convert.ToString(DispNum));
                DispNum++;
            }
        }
    }
}

我左键单击button1,在listBox1中出现3行分别为0 1 2,但是我只接了2个显示器,不是应该出来2行分别为0 1吗?
------解决思路----------------------
那你看看设备名都是什么
  相关解决方案