禁用特定应用程序的Windows 10缩放功能

时间:2018-08-09 13:36:01

标签: c# winforms

我在某些应用程序(主要是仪表板)上遇到问题,某些用户使用Windows显示比例缩放来增大其图标,但这在我的软件中造成了巨大的问题。我正在寻找一种方法来完全禁用应用程序的缩放比例,而将应用程序缩放为显示分辨率的像素。

我发现this thread,但是它已经有8年历史了,当时Windows 10还不存在,另一个用户给出了答案,但是它也不起作用。

这种行为的简单示例主要发生在仪表板上,因为在此类屏幕上有很多控件和小部件,它们对于诸如机器人机械控制器之类的事情至关重要。

一个示例仪表板窗口的最小尺寸为1900 x 980(可以在两个方向上缩小4-5像素,但是我们四舍五入以获得四舍五入的位置XY值)。该分辨率仅差1920 x 1080。它不能更小,但是如果您拥有更大的屏幕(例如4K),并且可以将其放大,那么您获得的只是树状视图中的日期更多,在3d Engine渲染器中的显示效果更好等。

因此,某些用户的笔记本电脑屏幕较小,例如15英寸,最大分辨率为1920 x 1080,但是他们使用150%的缩放比例,因此我的屏幕最小尺寸在他们的屏幕上变成了2850 x 1470,这使该应用程序大于屏幕并超出屏幕。

另一个示例,如果我使用的Windows Surface Pro的分辨率为2736 x 1824,比1920 x 1080大80%,则窗口的确确实会占用屏幕上原始的1900 x 980像素。屏幕使其看起来很小,因此如果全屏显示,则所有控件中的信息都会更多。但是,如果您将缩放比例更改为150%,则屏幕现在再次在屏幕上获取2850 x 1470像素,该像素非常适合高度,但宽度却不足100像素,而100像素足以使右边失去我的屏幕的一部分,那么您将看不到屏幕的最左侧或最右侧。

我尝试了3种自动缩放模式:DPI,字体和无,它根本不起作用。无论如何,它仍然可以拉伸屏幕。更改表单的字体也无济于事,我设法使其一次可以直接在表单中用于少数标签,但是组框内的任何内容都无法更改,或者与其余的相比,其大小增加了两倍。

重要要点:

  • 项目分别是.net 4.54.6,但如果需要特定功能,则可以在4.7中进行编译。
  • WPF不可能。我们花了3年的时间来实现它,并很快以非常糟糕的性能结束了第三方DLL,而3D Cad的性能简直是糟糕透顶。
  • 屏幕已经用尽可能少的控件进行了优化。在这数百个屏幕和数千个用户控件中,其中约有一半非常接近1920 x 1080的限制,该限制约为我们客户的90%
  • 我已收到有关在客户端计算机上以100%缩放比例运行虚拟机的建议,该虚拟机不受主机的影响。这可能是我的最后选择,因为通过虚拟机(尤其是Quadro和FireGL等CAD卡)处理专用视频卡非常困难。
  • 一半的用户使用触摸屏,我们尝试将所有内容放在带有2个滚动条的面板中,但是这太糟糕了,只能在蓝月亮中工作一次。因此,这仅对鼠标用户有用,并且这些用户都具有桌面AFAIK,因此其中99%的用户不使用缩放比例,因此他们没有问题。

那么,如今有什么可以解决或解决此问题的东西?

1 个答案:

答案 0 :(得分:0)

您是否尝试让流程DPI知道?

您可以通过pinvoke完成此操作:

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool SetProcessDPIAware();

并致电

SetProcessDPIAware();

在您的Main中或创建清单并添加

<dpiAware>true</dpiAware>

有一个教程here。 取消选中它,DPIAware应该阻止窗口自行扩展。