0

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

4 回答 4

2

如果您喜欢冒险,请查看注册表项。特别是 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY 并循环显示显示器(或者更好地只是活动显示器)并使用EDID信息来获取显示器的屏幕宽度和高度(根据毕达哥拉斯定理,对角线长度)

于 2014-02-05T03:47:51.237 回答
2

这个答案有两个部分 - 请不要判断。新的我很不确定,但会给你更好的结果。我敢肯定,较旧的会以某种方式工作。

新答案

我认为您在所查看的一个问题中错过了一个非常重要的答案。有一个答案是使用Graphics.DpiXGraphics.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;

现在,您可以在应用程序中尽可能多地重用代码。这对我有用。

于 2014-03-28T06:22:37.300 回答
1

您会发现很难获得显示器的物理尺寸。您可能能够获得分辨率和 DPI 并从那里计算出来,但这并不一定会给您正确的答案。想象一下投影仪——您可能知道它的分辨率和 DPI,但显示图像的物理尺寸将取决于到屏幕的距离。不过,这不仅仅是投影仪。例如,每台显示器的制造过程可能会导致数字略有偏差。

我很想删除对物理尺寸的任何引用,并根据显示器的分辨率和 DPI 功能进行适当调整大小的流畅布局。

于 2012-10-22T11:49:56.750 回答
0

尝试

       System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height

它在我的情况下工作。

于 2012-10-22T11:24:20.200 回答