如何从C#winform应用程序检索屏幕分辨率?
您是否需要标准应用程序所使用的区域,即排除Windows任务栏和停靠窗口?如果是这样,请使用Screen.WorkingArea property。否则,请使用Screen.Bounds。
如果有多个显示器,则需要从形式抓取屏幕,即
Form myForm;
Screen myScreen = Screen.FromControl(myForm);
Rectangle area = myScreen.WorkingArea;
如果你想知道哪个是主显示屏幕,使用Screen.Primary属性。此外,您可以从Screen.AllScreens属性中获取屏幕列表。
使用Screen类,并询问Bounds属性。 Screen类有一个静态属性Primary Screen,另一个静态属性返回a list of all the screens attached to the system。
+1链接到Screen.AllScreens。对于Screen.WorkingArea,为 – ToolmakerSteve 2013-10-10 17:51:25
Screen.PrimaryScreen.WorkingArea.Size()
给出的答案是正确的,就它而言。但是,如果将文本大小设置为超过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);
+1。我错误地使用了Screen.Bounds。如果可以的话,我会给你+2,提及Screen.FromControl而不是Screen.PrimaryScreen! – ToolmakerSteve 2013-10-10 17:44:51