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?

Windows 10, but decent.
Post Reply
265 993 303
Posts: 14
Joined: 28 Nov 2023, 19:09
OS: Windows 7 x64 SP1
Been thanked: 3 times
Contact:
Poland

How to get rid of DPI virtualization?

Unread post by 265 993 303 »

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:
Poland

How to get rid of DPI virtualization?

Unread post by 265 993 303 »

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

Code: Select all

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
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.

UCyborg
Posts: 215
Joined: 19 Nov 2024, 19:14
OS: Windows 10 x64
Has thanked: 41 times
Been thanked: 56 times
Slovenia

How to get rid of DPI virtualization?

Unread post by UCyborg »

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
Vietnam

How to get rid of DPI virtualization?

Unread post by ThatRandomToast »

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.
Does upscaling break something?

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

How to get rid of DPI virtualization?

Unread post by 265 993 303 »

UCyborg wrote: 13 Sep 2026, 14:00 Maybe have a globally defined __COMPAT_LAYER environment variable and have it set to HighDpiAware.
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)
ThatRandomToast wrote: 14 Sep 2026, 03:10 Does upscaling break something?
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.

Post Reply