吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 17644|回复: 22
收起左侧

[调试逆向] 开启Win10的文件资源管理器的每显示器DPI缩放(Per-Monitor DPI Aware)支持

[复制链接]
Mouri_Naruto 发表于 2016-6-14 00:12
众所周知,Windows 8.1开始系统增加了Per-Monitor DPI Aware级别,从8.1开始只有达到这个级别的才算“真·DPI”缩放支持;System Aware面对可以动态生效DPI的系统或者多显示器,例如Windows10,就会使用DPI虚拟化进行强制缩放,于是就是模糊

我最近在给我的作品加上 Per-Monitor DPI Aware支持;但是还是有部分不完美;例如标题栏、菜单栏和菜单无法正常缩放……如果有解决方案的话希望可以指导我

但是我发现微软的Win32实现的运行对话框的标题栏、菜单栏和菜单却能正常动态缩放;于是我用IDA打开存在运行对话框函数RunFileDlg的Shell32.dll

虽然我没有找到微软是怎么做到的(也许是我不够仔细);但是偶然发现一个API,让我提起了兴趣;然后生成了C伪码,如下

[C++] 纯文本查看 复制代码
char __stdcall IsPerMonitorAwareFileExplorerEnabled()
{
  signed int v0; // eax@1
  char v1; // bl@1
  int v3; // [sp+4h] [bp-Ch]@2
  int v4; // [sp+8h] [bp-8h]@2
  int v5; // [sp+Ch] [bp-4h]@2

  v0 = dword_69DB0A24;
  v1 = 1;
  if ( !dword_69DB0A24 )
  {
    v4 &= dword_69DB0A24;
    v5 = 4;
    if ( !RegGetValueW(
            -2147483646,
            L"Software\\Microsoft\\Windows\\CurrentVersion\\FlightedFeatures",
            L"PerMonitorAwareFileExplorer",
            0x10010,
            &v4,
            &v3,
            &v5) )
    {
      v1 = 1;
      if ( v3 == 1 )
      {
        dword_69DB0A24 = 1;
        return v1;
      }
      dword_69DB0A24 = 2;
      goto LABEL_6;
    }
    v0 = 1;
    dword_69DB0A24 = 1;
  }
  if ( v0 != 1 )
LABEL_6:
    v1 = 0;
  return v1;
}


粗略看了看,这是内部使用的文件资源管理器是否支持Per-Monitor DPI Aware级别支持的判断API

于是当时猜想如果这个API能返回true,岂不文件资源管理器就能支持Per-Monitor DPI Aware了

PS:文件资源管理器默认只能支持System Aware;Win10一拉DPI调整横杆就模糊,真的是浑身难受

然后粗略看了看实现,于是我尝试在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\FlightedFeatures下建立了一个PerMonitorAwareFileExplorer的DWORD值并设为1

然后重启Explorer,拉DPI调节横杆,结果还是糊;一看文件管理器所属的Explorer进程还是System Aware

突然我想到我可以去掉文件夹选项的“在单独的进程中打开文件夹窗口” 试试,于是文件资源管理器进程是Per-Monitor DPI Aware了;这让我很兴奋

我打开文件资源管理器;把 DPI从100%拉到125%,不注销;文件资源管理器正常缩放,最关键不模糊,完美

我上幅效果图

QQ图片20160614001017.png
其他不支持Per-Monitor DPI Aware的程序都是模糊的,你看winver;但是文件管理器正常缩放,而且不模糊!!!

该方法在Windows 10 TH2 Build 10586测试通过,其他系统不保证可以


毛利,于2016/6/14


免费评分

参与人数 4吾爱币 +3 热心值 +4 收起 理由
御座 + 1 + 1 用心讨论,共获提升!
huoxingshueva + 1 + 1 热心回复!
摘太阳8 + 1 + 1 谢谢@Thanks!
Hmily + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Mouri_Naruto 发表于 2017-10-7 00:11
w12101111 发表于 2017-10-4 00:06
RS3中任务管理器还是糊,微软可真懒

如果不是用XAML编写的桌面应用既想做的好看(指用些自绘控件)又想完美的支持高DPI真的太复杂了
123821407 发表于 2016-6-26 18:50
Uhn 发表于 2016-9-28 17:18
头像被屏蔽
sstm 发表于 2016-11-15 21:30
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽
sstm 发表于 2016-11-18 09:32
提示: 作者被禁止或删除 内容自动屏蔽
聂风 发表于 2016-12-1 18:11
有什么用??
 楼主| Mouri_Naruto 发表于 2016-12-3 09:42

宣告下发现,顺便治愈一些人的强迫症
EVGA 发表于 2017-1-17 02:48
发现对我没啥用
会成功的人 发表于 2017-1-20 08:51
看看,学习了。
带酱油瓶的少年 发表于 2017-1-25 08:52
666就服你这种大神
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 17:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表