win10高dpi设置时禁用显示缩放有啥用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了win10高dpi设置时禁用显示缩放有啥用?相关的知识,希望对你有一定的参考价值。

win10目前对高分屏支持不好,缩放改成100%,软件的字体会清晰,但是可能也会伴随产生字体过小现象,解决办法就是,一个一个软件去设置,找到软件图标后右键——属性——兼容性设置——勾选【高DPI禁用显示缩放】。不然就等win10或者软件对这方面进行优化了。

方法步骤如下:

1、就是网上常用的方法就是点击电脑开始按钮,找到运行,进入gpedit.msc设置;

2、从左侧依次展开计算机配置-管理模板-Windows组件-应用程序兼容性;

3、打开删除程序兼容性属性页选已禁用后点应用选项。

4、如果方法一不行的话,不要点程序快捷方式的右键,而是找到程序的所在位置,打开程序安装的文件夹,找到程序.exe点右键应该就有程序兼容设置了。

参考技术A

    作用:在安装Windows系统后很多朋友都会设置较大的DPI(特别是在小尺寸屏幕上)来让屏幕上的字体看起来更清晰。

    关闭高dpi设置:对着桌面软件图标,单击鼠标右键,菜单中选择“属性”。在软件属性界面,点击“兼容性”选项卡,在设置下面,点击勾寻高DPI设置时禁用显示缩放”后,点击底部“确定”按钮,退出设置界面即可。

    Win10最新DPI缩放机制:DPI虚拟化 Win10最新DPI缩放机制被Windows Vista/Win7/Win8/Win8.1所采用。如果DPI缩放比例不超过125%,继续使用传统DPI缩放机制,超过之后就开启这个新模式。

参考技术B

1. 不要使用自定义缩放级别,这会让2个显示器的DPI全部使用自定义的级别,我就是受了这个的影响,之前一直喜欢用133%(12寸2K)和168%(15寸4K);

2. 如果使用了自定义缩放级别也不要急,在显示设置中将主显示器调整到系统默认DPI,见下图,只要是拖动支持的级别就可以了,之后注销;

3.选中第二个显示器,调整级别就可以了;

只是这样出来的效果第二块屏有点糊,没有单独接上去100%看着清楚。

如果设置裏的DPI缩放被禁用

可以试试更改控制面板裏的自定义缩放级别

高 DPI 缩放、鼠标挂钩和 WindowFromPoint

【中文标题】高 DPI 缩放、鼠标挂钩和 WindowFromPoint【英文标题】:High DPI scaling, mouse hooks and WindowFromPoint 【发布时间】:2016-09-24 14:41:11 【问题描述】:

我有一个设置SetWindowsHookEx(WH_MOUSE_LL, , ,) 右键单击​​钩子的进程。我的进程在 Window 10.0.10586 上设置为 DPI 系统感知,在两个显示器上以 150% 的比例缩放。这是通过调用SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE) 设置的。

我的问题场景是例如Office 2007 不知道 DPI,所以让我们将 MS Word 放在屏幕的右四分之一。右击右下角任务栏上方,鼠标钩子发送坐标 1279, 675 - 缩放到 Word。然后我右键单击视觉工作室(DPI 感知),在屏幕上将近四分之三,鼠标钩向我发送坐标,例如1279、1008 来自 Visual Studio。因此,如果我在屏幕上方单击,我可能会得到相同的 1279、675。

我的进程试图通过调用WindowFromPoint API 来确定该点所在的窗口,但在这种情况下这显然会失败,因为两个应用程序“共享”同一点。

是否可以强制鼠标挂钩始终发送原始物理坐标,而不是那些缩放到 DPI 不感知应用程序的坐标?如果是这样,如何?或者,是否有其他方法可以通过鼠标钩子确定hWndprocessID

【问题讨论】:

【参考方案1】:

Microsoft 在 10.0.14393 中修复了它。

除非它们在 LTSB 10.0.10240 上,否则现在您的客户网络中应该没有任何具有较低内部版本号的东西。

这是解决方案:DPI aware screen capture

【讨论】:

【参考方案2】:

因为进程是 DPI 感知的,所以在鼠标挂钩回调处理程序中调用 GetCursorPos() 总是获取原始物理坐标,而不是缩放到应用程序的逻辑坐标。只需丢弃传递给鼠标回调的坐标。

于 2016 年 9 月 30 日添加

尽管 GetMessagePos 看起来很可能,但它仅在进程未进行 dpi 虚拟化时才返回正确的坐标,这一点毫无价值。

例如

VOID MessagePump()

    MSG     messageGet =  0 ;
    DWORD   dwPos;
    POINTS  p;

    while (GetMessage(&messageGet,NULL,0,0)) 
    
        dwPos = GetMessagePos();
        p = MAKEPOINTS( dwPos );
        TranslateMessage( &messageGet );
        DispatchMessage( &messageGet );
    

在 GetMessage() 调用期间调用鼠标回调处理程序,但这不会获取正确的物理坐标,其中 DPI 虚拟化对进程处于活动状态。例如物理 x = 1909, y = 1072 以 175% 的缩放比例返回 1091, 612,虽然算术上正确,但不是必需的。

【讨论】:

听起来是个坏主意。调用 GetCursorPos 时,光标可能在别处。 这是迄今为止我能想到的最好的,而且似乎几乎是瞬间完成的,但我愿意接受任何更好的建议。 GetMessagePos 可能更合适。 我今天试了GetMessagePos,结果没用。它们根本不对应。 看到SetProcessDpiAwareness 是在 Windows 8.1 中引入的,因此相对于 Windows 7 的行为会发生变化,这是预期的结果。由于我们看不到您的代码,因此无法知道您是否正确提取了鼠标位置。文档告诉你怎么做。

以上是关于win10高dpi设置时禁用显示缩放有啥用?的主要内容,如果未能解决你的问题,请参考以下文章

如何让MFC程序在高DPI设置时禁用显示缩放

怎样进行Win10软件高DPI设置

Win10 字体模糊解决(DPI缩放禁用),设置默认输入法英文

Dpi缩放问题

win10 dpi设置是啥意思

windows DPi缩放