Enumerate Display Monitors : Native Windows Function « Windows « C# / CSharp Tutorial

NET Development for Java Programmers
# By Paul Gibbons
# ISBN: 1-59059-038-4
# 432 pp.
# Published: Jul 2002


using System;
using System.Runtime.InteropServices;

[ StructLayout( LayoutKind.Sequential ) ]
struct Rect
  public int left;
  public int top;
  public int right;
  public int bottom;

[ StructLayout( LayoutKind.Sequential ) ]
struct MonitorInfo
  public uint size;
  public Rect monitor;
  public Rect work;
  public uint flags;

class MainClass
  delegate bool MonitorEnumDelegate( IntPtr hMonitor,IntPtr hdcMonitor,ref Rect lprcMonitor, IntPtr dwData );

  [ DllImport( "user32.dll" ) ]
  static extern bool EnumDisplayMonitors( IntPtr hdc, IntPtr lprcClip, MonitorEnumDelegate lpfnEnum, IntPtr dwData );

  [ DllImport( "user32.dll" ) ]
  static extern bool GetMonitorInfo( IntPtr hmon, ref MonitorInfo mi );
  static bool MonitorEnum( IntPtr hMonitor, IntPtr hdcMonitor, ref Rect lprcMonitor,  IntPtr dwData )
    MonitorInfo mi = new MonitorInfo();
    mi.size = (uint)Marshal.SizeOf( mi );
    bool success = GetMonitorInfo( hMonitor, ref mi );

    return true;

  static void Main(string[] args)
    MonitorEnumDelegate med = new MonitorEnumDelegate( MonitorEnum );
    EnumDisplayMonitors( IntPtr.Zero, IntPtr.Zero, med, IntPtr.Zero );

29.10.Native Windows Function
29.10.1.Calling Native DLL Functions
29.10.2.Calling a Function with a Structure Parameter
29.10.3.Enumerate Display Monitors
29.10.4.Get Workstation information
29.10.5.Get Computer name (char * parameter)
29.10.6.Get free disk space
29.10.7.Use native windows function to read file
29.10.8.The windows version information
29.10.9.Get current Active Window
29.10.10.Writing INI file: Write Private Profile String
29.10.11.Reading INI file: Get Private Profile String
29.10.12.GetVersionEx by using kernel32.dll
29.10.13.Get computer name (StringBuilder parameter)
29.10.14.Lock work station
29.10.15.Get Monitor Information