在C#桌面应用开发中,获取显示器分辨率是适配不同显示设备的常见需求,无论是调整窗口初始尺寸,还是布局界面元素,都需要用到屏幕的宽度和高度信息。C#针对不同开发框架提供了对应的API来实现这个功能,下面分别介绍不同场景下的实现方式。

WinForms框架下获取屏幕分辨率
WinForms开发中,最常用的获取屏幕信息的类是System.Windows.Forms.Screen,该类提供了当前屏幕和所有屏幕的相关属性,无需额外引用其他依赖。
获取主屏幕分辨率
主屏幕是当前系统默认的主显示设备,通过Screen.PrimaryScreen可以直接获取主屏幕对象,再通过Bounds属性拿到屏幕的矩形区域,其中Width是宽度,Height是高度。
using System;
using System.Windows.Forms;
namespace GetScreenResolutionWinForms
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
// 获取主屏幕对象
Screen primaryScreen = Screen.PrimaryScreen;
// 获取主屏幕的宽度和高度
int screenWidth = primaryScreen.Bounds.Width;
int screenHeight = primaryScreen.Bounds.Height;
// 输出分辨率信息
Console.WriteLine($"主屏幕分辨率:{screenWidth} * {screenHeight}");
// 也可以显示在界面控件上,比如label
// label1.Text = $"主屏幕分辨率:{screenWidth} * {screenHeight}";
}
}
}
获取所有屏幕的分辨率
如果设备连接了多个显示器,可以通过Screen.AllScreens获取所有屏幕的数组,遍历数组就能拿到每个屏幕的分辨率信息。
using System;
using System.Windows.Forms;
namespace GetScreenResolutionWinForms
{
public class ScreenHelper
{
public static void GetAllScreenResolutions()
{
// 获取所有屏幕
Screen[] allScreens = Screen.AllScreens;
for (int i = 0; i < allScreens.Length; i++)
{
Screen screen = allScreens[i];
int width = screen.Bounds.Width;
int height = screen.Bounds.Height;
Console.WriteLine($"第{i+1}块屏幕分辨率:{width} * {height}");
}
}
}
}
WPF框架下获取屏幕分辨率
WPF开发中没有直接使用Screen类,需要引用System.Windows.Forms程序集,或者使用WPF自带的SystemParameters类,不过SystemParameters获取的是系统参数,多显示器场景下推荐使用Screen类。
引用WinForms的Screen类实现
首先在WPF项目中添加对System.Windows.Forms的引用,之后就可以和WinForms中一样使用Screen类获取分辨率。
using System;
using System.Windows;
using System.Windows.Forms;
namespace GetScreenResolutionWPF
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// 获取主屏幕分辨率
Screen primaryScreen = Screen.PrimaryScreen;
int width = primaryScreen.Bounds.Width;
int height = primaryScreen.Bounds.Height;
MessageBox.Show($"主屏幕分辨率:{width} * {height}");
}
}
}
使用SystemParameters获取主屏幕分辨率
如果不想引用额外的程序集,可以使用SystemParameters类的PrimaryScreenWidth和PrimaryScreenHeight属性,不过该方式仅能获取主屏幕的信息,无法获取其他扩展屏幕的分辨率。
using System;
using System.Windows;
using System.Windows.Media;
namespace GetScreenResolutionWPF
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// 获取主屏幕宽度,返回值是double类型
double primaryWidth = SystemParameters.PrimaryScreenWidth;
// 获取主屏幕高度,返回值是double类型
double primaryHeight = SystemParameters.PrimaryScreenHeight;
MessageBox.Show($"主屏幕分辨率:{primaryWidth} * {primaryHeight}");
}
}
}
注意事项
Screen.Bounds获取的是包含任务栏等系统区域的完整屏幕分辨率,如果需要获取工作区(排除任务栏)的尺寸,可以使用Screen.WorkingArea属性,其Width和Height就是工作区的宽高。- 多显示器场景下,
Screen.AllScreens数组的顺序不一定和显示器的物理排列顺序一致,如果需要指定某个显示器的分辨率,需要结合显示器的设备名称等其他属性判断。 - WPF中引用
System.Windows.Forms程序集时,需要注意项目的目标框架是否兼容,避免出现引用错误。
获取显示器分辨率的核心是通过系统提供的屏幕类拿到对应的尺寸属性,开发者可以根据自己使用的开发框架选择对应的实现方式,满足不同的业务需求。