现在的位置: 首页 > 综合 > 正文

C# NET调用API枚举系统监视器,显示器

2013年08月15日 ⁄ 综合 ⁄ 共 1637字 ⁄ 字号 评论关闭

using System;
using System.Runtime.InteropServices;
namespace OpticalTouch
{
public delegate bool MONITORENUMPROC(IntPtr hMonitor, IntPtr hdcMonitor, IntPtr lprcMonitor, IntPtr dwData);
[StructLayout(LayoutKind.Sequential, Size = 8)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
[StructLayout(LayoutKind.Sequential, Size = 8)]
public struct MonitorInfos
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public RECT[] Rects;
public int Count;
}
public class MonitorHelper
{
private MONITORENUMPROC monitorEnumProc;
public MonitorHelper()
{
monitorEnumProc = MonitorEnumProc;
}
public MonitorInfos EnumMonitors()
{
MonitorInfos mis = new MonitorInfos();
mis.Rects = new RECT[256];
mis.Count = 0;
IntPtr dwData = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(MonitorInfos)));
Marshal.StructureToPtr(mis, dwData, true);
EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, monitorEnumProc, dwData);
mis = (MonitorInfos)Marshal.PtrToStructure(dwData, typeof(MonitorInfos));
Marshal.FreeHGlobal(dwData);
return mis;
}
private bool MonitorEnumProc(IntPtr hMonitor, IntPtr hdcMonitor, IntPtr lprcMonitor, IntPtr dwData)
{
RECT rect = (RECT)Marshal.PtrToStructure(lprcMonitor, typeof(RECT));
MonitorInfos mis = (MonitorInfos)Marshal.PtrToStructure(dwData, typeof(MonitorInfos));
mis.Rects[mis.Count].Left = rect.Left;
mis.Rects[mis.Count].Top = rect.Top;
mis.Rects[mis.Count].Right = rect.Right;
mis.Rects[mis.Count].Bottom = rect.Bottom;
mis.Count++;
Marshal.StructureToPtr(mis, dwData, true);
return true;
}
[DllImport("User32.dll")]
private static extern bool EnumDisplayMonitors(IntPtr hdc, IntPtr pprcClip, MONITORENUMPROC monitorEnumProc, IntPtr dwData);
}
}
不多写了. 看MSDN, 看代码.

 

转自:

http://hi.baidu.com/%CE%E2%D6%BE%C7%BF/blog/item/bd517d3193cde60eeac4af26.html

抱歉!评论已关闭.