关于EnumDisplayDevices(null, DispNum, ref DisplayDevice, 零)
关于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吗?
------解决思路----------------------
那你看看设备名都是什么
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吗?
------解决思路----------------------
那你看看设备名都是什么