This is the ONE fatal flaw that prevents me from using Windows 8.1 and up. I have 3840×2160 display, and I mainly use 288dpi in Windows 7.
In DWM in Windows Vista, Windows 7, and Windows 8, there is an option to Use Windows XP style DPI scaling, which sets HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM\UseDpiScaling to 0 and ensures all Win32 apps get native resolution just like in all earlier Win32 versions. When UseDpiScaling is set to 1, DWM applies DPI virtualization above 120dpi in apps that lack dpi aware declaration, resulting in an upscaling from 96dpi, which defeats the purpose of very small pixels. This becomes particularly problematic in Windows 8.1 which not only forces DWM, but also UseDpiScaling registry no longer works, and DPI virtualization for more than 120dpi is seemingly always enforced. Even Windows 95 and Windows NT 3.5 have fully functional DPI scaling with native resolution at all pixel densities, so Win32 had over 25 years of dpi-aware history, so there is no excuse for DPI virtualization. It's really driving me crazy since it seems like this should be just one integer comparison branch in DWM that has to be edited and yet it completely ruins the experience.
Due to server slowness, downtime, and other issues, guests can no longer search the forum or view user accounts. At some point in the future Eclipse will be moving to a more stable and efficient platform that should result in much better stability and the lifting of these restrictions. There is no timeline for this yet, just want you to know what's happening with all the downtime and I have a plan to fix it.
How to get rid of DPI virtualization?
-
265 993 303
- Posts: 14
- Joined: 28 Nov 2023, 19:09
- OS: Windows 7 x64 SP1
- Been thanked: 3 times
- Contact:

-
265 993 303
- Posts: 14
- Joined: 28 Nov 2023, 19:09
- OS: Windows 7 x64 SP1
- Been thanked: 3 times
- Contact:

How to get rid of DPI virtualization?
This topic might belong into the 'Research Network' category, since more research is needed is resolve this issue which affects Windows 8.1/10/11.
One way to potentially resolve this issue is to modify system files to alter the x86 branches leading up to DPI virtualization. But that would require admin permissions and it would be reverted with every system update. I tried to find the relevant x86 branch at one point in Windows 8.1 but failed to do so, so I still mainly use Windows 7 on my main PC.
Another way could be to identify the setting corresponding to 'Disable display scaling on high DPI settings' or 'Application' and then automatically apply it on every *.exe file that runs. This could be done by inserting values for every *.exe file with data "HIGHDPIAWARE" into registry. But for this to work reliably, it would have to attach to a file index such as Everything in order to detect created *.exe files to ensure that the setting is applied before the program runs.
One way to potentially resolve this issue is to modify system files to alter the x86 branches leading up to DPI virtualization. But that would require admin permissions and it would be reverted with every system update. I tried to find the relevant x86 branch at one point in Windows 8.1 but failed to do so, so I still mainly use Windows 7 on my main PC.
Another way could be to identify the setting corresponding to 'Disable display scaling on high DPI settings' or 'Application' and then automatically apply it on every *.exe file that runs. This could be done by inserting values for every *.exe file with data "HIGHDPIAWARE" into
Code: Select all
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers-
UCyborg
- Posts: 215
- Joined: 19 Nov 2024, 19:14
- OS: Windows 10 x64
- Has thanked: 41 times
- Been thanked: 56 times

How to get rid of DPI virtualization?
Maybe have a globally defined __COMPAT_LAYER environment variable and have it set to HighDpiAware.
-
ThatRandomToast
- Posts: 12
- Joined: 15 Dec 2024, 15:41
- OS: Windows 10 x64
- Has thanked: 1 time
- Been thanked: 6 times

How to get rid of DPI virtualization?
Does upscaling break something?265 993 303 wrote: ↑17 Dec 2023, 10:16 This is the ONE fatal flaw that prevents me from using Windows 8.1 and up. I have 3840×2160 display, and I mainly use 288dpi in Windows 7.
In DWM in Windows Vista, Windows 7, and Windows 8, there is an option to Use Windows XP style DPI scaling, which sets HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM\UseDpiScaling to 0 and ensures all Win32 apps get native resolution just like in all earlier Win32 versions. When UseDpiScaling is set to 1, DWM applies DPI virtualization above 120dpi in apps that lack dpi aware declaration, resulting in an upscaling from 96dpi, which defeats the purpose of very small pixels. This becomes particularly problematic in Windows 8.1 which not only forces DWM, but also UseDpiScaling registry no longer works, and DPI virtualization for more than 120dpi is seemingly always enforced. Even Windows 95 and Windows NT 3.5 have fully functional DPI scaling with native resolution at all pixel densities, so Win32 had over 25 years of dpi-aware history, so there is no excuse for DPI virtualization. It's really driving me crazy since it seems like this should be just one integer comparison branch in DWM that has to be edited and yet it completely ruins the experience.
-
265 993 303
- Posts: 14
- Joined: 28 Nov 2023, 19:09
- OS: Windows 7 x64 SP1
- Been thanked: 3 times
- Contact:

How to get rid of DPI virtualization?
By itself, that global environment variable applies to the current session in Windows 11 x64, but after a reboot it gets ignored. But when I looked into it further, I found this topic: https://www.eightforums.com/threads/global-dpi-scaling-disable-for-win8-1-for-all-files-users.42452/ When I tested it on Windows 11 x64, it actually works for non-system programs, so that solves the issue for the most part, though it doesn't really work for system32 programs though (this is problematic for users trying to replace notepad.exe and mspaint.exe with Windows XP versions, though it can be workarounded by making them batch files or shortcuts instead).
(I guess that's another one to add to the huge pile of essential things to do before Windows 8.1/10/11 becomes somewhat usable)
It's pretty damn broken when I can't even view my own screenshot properly. (If I press print screen and paste to XP Paint, I expect the screenshot to appear in exact 1× scale, not some virtualized scale) It's also a huge waste of screen real estate if the application draws on a lower resolution canvas than the screen itself. Windows also supported high dpi for about 13 years (Windows NT 3.5 in 1994) before Vista introduced DPI awareness declaration, and TrueType text can easily adapt to high dpi configurations, so plenty of applications support high dpi without declaring dpi awareness, making DPI virtualization especially wasteful for those applications.