吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 17933|回复: 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++] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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, 2025-4-6 04:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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