C# 获取多个屏幕的宽高 有几种方法
时间: 2023-08-18 22:08:03 浏览: 311
以下是获取多个屏幕宽高的几种方法:
1. 使用 System.Windows.Forms.Screen 类
可以使用 System.Windows.Forms.Screen 类来获取所有显示器的屏幕大小和位置信息。这个类的 AllScreens 属性返回一个 Screen 数组,其中包含每个显示器的信息。可以使用 WorkingArea 属性获取每个显示器的工作区大小,使用 Bounds 属性获取每个显示器的全屏大小。
示例代码:
```csharp
Screen[] screens = Screen.AllScreens;
foreach (Screen screen in screens)
{
Console.WriteLine("Device Name: " + screen.DeviceName);
Console.WriteLine("Working Area: " + screen.WorkingArea.ToString());
Console.WriteLine("Bounds: " + screen.Bounds.ToString());
}
```
2. 使用 WMI (Windows Management Instrumentation)
可以使用 WMI (Windows Management Instrumentation) 查询来获取所有显示器的屏幕大小和位置信息。可以使用 Win32_DesktopMonitor 类和 Win32_VideoController 类来获取这些信息。
示例代码:
```csharp
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DesktopMonitor");
foreach (ManagementObject monitor in searcher.Get())
{
Console.WriteLine("Screen Width: " + monitor["ScreenWidth"].ToString());
Console.WriteLine("Screen Height: " + monitor["ScreenHeight"].ToString());
}
searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
foreach (ManagementObject videoController in searcher.Get())
{
Console.WriteLine("Video Width: " + videoController["CurrentHorizontalResolution"].ToString());
Console.WriteLine("Video Height: " + videoController["CurrentVerticalResolution"].ToString());
}
```
3. 使用 WinAPI
可以使用 WinAPI 来获取所有显示器的屏幕大小和位置信息。可以使用 EnumDisplayMonitors 和 GetMonitorInfo 函数来获取这些信息。
示例代码:
```csharp
delegate bool MonitorEnumProc(IntPtr hMonitor, IntPtr hdcMonitor, ref RECT lprcMonitor, IntPtr dwData);
[DllImport("user32.dll")]
static extern bool EnumDisplayMonitors(IntPtr hdc, IntPtr lprcClip, MonitorEnumProc lpfnEnum, IntPtr dwData);
[DllImport("user32.dll")]
static extern bool GetMonitorInfo(IntPtr hMonitor, ref MONITORINFO lpmi);
[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 MONITORINFO
{
public int cbSize;
public RECT rcMonitor;
public RECT rcWork;
public uint dwFlags;
}
static bool MonitorEnum(IntPtr hMonitor, IntPtr hdcMonitor, ref RECT lprcMonitor, IntPtr dwData)
{
MONITORINFO mi = new MONITORINFO();
mi.cbSize = Marshal.SizeOf(mi);
if (GetMonitorInfo(hMonitor, ref mi))
{
Console.WriteLine("Device Name: " + mi.szDevice);
Console.WriteLine("Monitor Area: " + mi.rcMonitor.ToString());
Console.WriteLine("Work Area: " + mi.rcWork.ToString());
}
return true;
}
EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, MonitorEnum, IntPtr.Zero);
```
这些方法都可以用来获取多个屏幕的宽高。其中,第一种方法是最简单的,第二种方法可以获取更多信息,第三种方法可以使用更底层的 WinAPI。
阅读全文