C# 调用EnumDisplayMonitors 和GetMonitorInfo 获取屏幕大小
时间: 2024-03-09 07:44:11 浏览: 316
获取屏幕尺寸
在C#中调用EnumDisplayMonitors和GetMonitorInfo函数获取屏幕大小,您可以使用以下代码:
```csharp
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Drawing;
class Program
{
[DllImport("user32.dll")]
static extern bool EnumDisplayMonitors(IntPtr hdc, IntPtr lprcClip, EnumMonitorsDelegate lpfnEnum, IntPtr dwData);
[DllImport("user32.dll")]
static extern bool GetMonitorInfo(IntPtr hMonitor, ref MonitorInfoEx lpmi);
delegate bool EnumMonitorsDelegate(IntPtr hMonitor, IntPtr hdcMonitor, ref Rect lprcMonitor, IntPtr dwData);
[StructLayout(LayoutKind.Sequential)]
public struct Rect
{
public int left;
public int top;
public int right;
public int bottom;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct MonitorInfoEx
{
public int cbSize;
public Rect rcMonitor;
public Rect rcWork;
public uint dwFlags;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string szDevice;
}
static bool MonitorEnumProc(IntPtr hMonitor, IntPtr hdcMonitor, ref Rect lprcMonitor, IntPtr dwData)
{
MonitorInfoEx mi = new MonitorInfoEx();
mi.cbSize = Marshal.SizeOf(mi);
GetMonitorInfo(hMonitor, ref mi);
int width = mi.rcMonitor.right - mi.rcMonitor.left;
int height = mi.rcMonitor.bottom - mi.rcMonitor.top;
Console.WriteLine("Screen width: " + width + ", height: " + height);
return true;
}
static void Main(string[] args)
{
EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, MonitorEnumProc, IntPtr.Zero);
}
}
```
该代码使用EnumDisplayMonitors函数枚举所有屏幕,并使用GetMonitorInfo函数获取每个屏幕的大小。然后将屏幕的宽度和高度打印到控制台中。注意,该示例代码使用了一些Windows API结构体和方法,需要在代码中进行声明和引用。
阅读全文