How to make an application use DPI virtualization in Windows 7/8

Is there a way to get an application to use DPI virtualization in Windows 8.1? I have an application that incorrectly declares DPI and displays too little on my high DPI screen (it has no source). It would be enough if it were increased 2x on Windows.

I tried to edit the .exe manifest and set <dpiAware>false</dpiAware> , but that did not affect. (Perhaps some parts of the application that used a larger font (font) used a small font (in pixels), as I would expect for DPI virtualization, I'm not quite sure ... but this certainly does not activate DWM scaling.)

What can I do? I read that other settings in the manifest can affect DPI virtualization other than dpiAware , is that true? An application can set the DPI setting at runtime via the API, how can I find out if this is so?

(Publishing this here, not the superuser, because there is no user-oriented parameter for this, and I expect the answer will be something like the line β€œedit the manifest such-and-such” or β€œenter the DLL / attach the debugger and do it”. And the fact that I do not have a source is secondary, I also have my own applications in which I have a source, and I would like to fix it, and I ask for a general solution to fix both cases. I hope that OK. )

+6
source share
1 answer

I just released a DLL that intercepts and redirects calls to SetProcessDPIAware. For applications that disable DPI scaling via code, this is a quick and easy fix (compared to a binary fix). Just download the intruder application using the CFF Explorer tool and add this DLL to the import table. (Alternatively, it could be dynamically entered at application startup.)

Please note that the current release only intercepts SetProcessDPIAware and leaves SetProcessDPIAwareness intact. If this is a problem, feel free to ping me and I will hook both.

DPIMangler: Blog post , source code .

+4
source

All Articles