I am using dual monitor and I want to find the Current(where my application is active) monitor's height and width (note : not resolution). How can i achieve this. My WPF application display screen size options based on current screen size.
4 回答
如果您喜欢冒险,请查看注册表项。特别是 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY 并循环显示显示器(或者更好地只是活动显示器)并使用EDID信息来获取显示器的屏幕宽度和高度(根据毕达哥拉斯定理,对角线长度)
这个答案有两个部分 - 请不要判断。新的我很不确定,但会给你更好的结果。我敢肯定,较旧的会以某种方式工作。
新答案
我认为您在所查看的一个问题中错过了一个非常重要的答案。有一个答案是使用Graphics.DpiX
和Graphics.DpiY
分别将它们除以像素分辨率的 x 和 y 值。在这里阅读!不要忘记阅读评论。
因为不同显示器的一英寸像素数量不同,所以这个家伙发现这Graphics.DpiX
是制作一英寸所需的 X 轴上的像素数量。这同样适用于Graphics.DpiY
显然将每英寸像素指向 y 轴。为了从分辨率中找到英寸,您将这两者相除。您可以在此处和此处阅读有关用法的更多信息。第二个链接在 Visual Basic 中,但假设您有以前的 C# 知识,您将能够弄清楚语法。
请注意 - 我还没有尝试过以下任何一种方法!
从引用开始System.Drawing
。
接下来,理论上(我之前没有尝试过,所以如果可以的话,请纠正我)你需要创建一个新的 Graphics 类。
Graphics DesktopGraphics = Graphics.FromHdc(GetDC(IntPtr.Zero));
现在,使用引用相关显示器的新 Graphics 类,我们获取 DPI 和屏幕分辨率,然后将屏幕分辨率除以 DPI 以获得屏幕的英寸数。
SystemInformation.PrimaryMonitorSize.Width / Graphics.DpiX
宽度和SystemInformation.PrimaryMonitorSize.Height / Graphics.DpiY
高度。您需要将这两个分配给它们各自的变量,瞧!屏幕的宽度和高度 - 以英寸为单位。
再次,如果我做错了什么,请告诉我。我仍然是一个新手程序员,所以如果我做错了什么,请不要抨击我或抨击我——如果我这样做了,你能建议适当的代码吗?
旧答案
写信的人;尝试System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height
它在我的情况下工作。实际上,它告诉你的是以像素为单位的高度。您需要做的是将此整数转换为英寸。
一英寸等于 96 个像素(或者更准确地说是 96.0000000000011)。因此,编写以下代码;
//Height
Int MonitorHeightinInches = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height / 96;
//Width
Int MonitorWidthinInches = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width / 96;
现在,您可以在应用程序中尽可能多地重用代码。这对我有用。
您会发现很难获得显示器的物理尺寸。您可能能够获得分辨率和 DPI 并从那里计算出来,但这并不一定会给您正确的答案。想象一下投影仪——您可能知道它的分辨率和 DPI,但显示图像的物理尺寸将取决于到屏幕的距离。不过,这不仅仅是投影仪。例如,每台显示器的制造过程可能会导致数字略有偏差。
我很想删除对物理尺寸的任何引用,并根据显示器的分辨率和 DPI 功能进行适当调整大小的流畅布局。
尝试
System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height
它在我的情况下工作。