猿问
下载APP

如何获取Windows显示设置?

如何获取Windows显示设置?

Windows 7中的显示设置(控制面板 - >显示)。它允许更改屏幕上文本和其他项目的大小。我需要让这个设置能够根据设置值打开/关闭我的C#应用程序中的某些功能。那可能吗?



PIPIONE
浏览 44回答 3
3回答

冉冉说

此设置是屏幕DPI或每英寸点数。像这样阅读:float dpiX, dpiY;Graphics graphics = this.CreateGraphics();dpiX = graphics.DpiX;dpiY = graphics.DpiY;我认为目前X和Y值不同是不可能的。值96对应于100%字体缩放(较小),120对应于125%缩放(中),144对应于150%缩放(较大)。但是,用户可以设置除这些标准值之外的值。请注意,除非您的应用程序被声明为DPI识别,否则您观察到的值可能会受到DPI虚拟化的影响。

慕哥9229398

在所有缩放级别中,graphics.DpiX和DeviceCap.LOGPIXELSX都在Surface Pro上返回96。相反,我设法以这种方式计算缩放因子:[DllImport("gdi32.dll")]static extern int GetDeviceCaps(IntPtr hdc, int nIndex);public enum DeviceCap{     VERTRES = 10,     DESKTOPVERTRES = 117,     // http://pinvoke.net/default.aspx/gdi32/GetDeviceCaps.html}  private float getScalingFactor(){     Graphics g = Graphics.FromHwnd(IntPtr.Zero);     IntPtr desktop = g.GetHdc();     int LogicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.VERTRES);     int PhysicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.DESKTOPVERTRES);      float ScreenScalingFactor = (float)PhysicalScreenHeight / (float)LogicalScreenHeight;     return ScreenScalingFactor; // 1.25 = 125%}

ITMISS

在我看来,最简单的方法是使用GetDeviceCaps函数。来自pinvoke.net:[DllImport("gdi32.dll",&nbsp;CharSet&nbsp;=&nbsp;CharSet.Auto,&nbsp;SetLastError&nbsp;=&nbsp;true,&nbsp;ExactSpelling&nbsp;=&nbsp;true)]public&nbsp;static&nbsp;extern&nbsp;int&nbsp;GetDeviceCaps(IntPtr&nbsp;hDC,&nbsp;int&nbsp;nIndex);public&nbsp;enum&nbsp;DeviceCap{ &nbsp;&nbsp;///&nbsp;<summary> &nbsp;&nbsp;///&nbsp;Logical&nbsp;pixels&nbsp;inch&nbsp;in&nbsp;X &nbsp;&nbsp;///&nbsp;</summary> &nbsp;&nbsp;LOGPIXELSX&nbsp;=&nbsp;88, &nbsp;&nbsp;///&nbsp;<summary> &nbsp;&nbsp;///&nbsp;Logical&nbsp;pixels&nbsp;inch&nbsp;in&nbsp;Y &nbsp;&nbsp;///&nbsp;</summary> &nbsp;&nbsp;LOGPIXELSY&nbsp;=&nbsp;90 &nbsp;&nbsp;//&nbsp;Other&nbsp;constants&nbsp;may&nbsp;be&nbsp;founded&nbsp;on&nbsp;pinvoke.net}用法:Graphics&nbsp;g&nbsp;=&nbsp;Graphics.FromHwnd(IntPtr.Zero);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntPtr&nbsp;desktop&nbsp;=&nbsp;g.GetHdc();int&nbsp;Xdpi&nbsp;=&nbsp;GetDeviceCaps(desktop,&nbsp;(int)DeviceCap.LOGPIXELSX);int&nbsp;Ydpi&nbsp;=&nbsp;GetDeviceCaps(desktop,&nbsp;(int)DeviceCap.LOGPIXELSY);在这种方法中,您无需将应用程序标记为dpi识别。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答