如何从C#winform应用程序中检索屏幕分辨率?

如何检索运行C#Winform App的屏幕分辨率?

您是否只需要标准应用程序将使用的区域,即排除Windows任务栏和停靠窗口? 如果是这样,请使用Screen.WorkingArea属性 。 否则,请使用Screen.Bounds 。

如果有多个显示器,则需要从表单中获取屏幕,即

Form myForm; Screen myScreen = Screen.FromControl(myForm); Rectangle area = myScreen.WorkingArea; 

如果您想知道哪个是主显示屏幕,请使用Screen.Primary属性。 此外,您还可以从Screen.AllScreens属性中获取屏幕列表。

给定的答案是正确的,就其而言。 但是,当您将文本大小设置为超过125%时,Windows(和.NET)会开始关于屏幕大小,以便为您进行自动缩放。

大多数情况下,这不是问题 – 您通常希望Windows和.NET执行此操作。 但是,如果您确实需要知道屏幕上的实际像素数(例如,您想直接绘制到桌面DC),则可以执行以下操作。 我只在Win10上试过这个。 YMMV在其他Windows版本上。

到目前为止,如果您不想全局关闭应用中的DPI感知,这是我发现获得真正的屏幕像素数的唯一方法。 请注意,此示例获取主显示大小 – 您需要修改它以获取其他屏幕。

 [DllImport("User32.dll")] static extern IntPtr GetDC(IntPtr hwnd); [DllImport("User32.dll")] static extern int ReleaseDC(IntPtr hwnd, IntPtr dc); [DllImport("gdi32.dll")] static extern int GetDeviceCaps(IntPtr hdc, int nIndex); IntPtr primary = GetDC(IntPtr.Zero); int DESKTOPVERTRES = 117; int DESKTOPHORZRES = 118; int actualPixelsX = GetDeviceCaps(primary, DESKTOPHORZRES); int actualPixelsY = GetDeviceCaps(primary, DESKTOPVERTRES); ReleaseDC(IntPtr.Zero, primary); 

使用Screen类,并询问Bounds属性。 Screen类具有Primary Screen的静态属性,以及另一个静态属性,它返回附加到系统的所有屏幕的列表 。

 Screen.PrimaryScreen.WorkingArea.Size()