Today, many PCs ship with very high resolution displays even if the PC form factor is smaller for example, an Ultrabook or a tablet. Or you may have a desktop monitor with 4K resolution. At such resolutions, Windows automatically turns on DPI scaling so everything on your screen becomes larger. However, there are some third party apps, which don't render properly on high DPI screens. They look too small for the screen resolution. Let us see how to fix them if Windows 8.1 or Windows 10 does not scale them properly.
Typically, such apps were written before high DPI displays appeared and were not properly updated to support high DPI. They appear too small on the screen with impossible to read fonts and they don't scale properly. Often buttons are misplaced or too tiny to click for old apps which haven't been updated for high DPI displays. Windows normally scales all apps automatically using XP style scaling as well as DPI virtualization for those apps that don't tell Windows that they are DPI aware. However there are some apps which lie to Windows that they are high DPI aware even if they are not, which is why Windows does not scale them. Such apps render improperly on full HD or 4K resolutions.
To fix them, a trick can be done which forces Windows to scale the app using DPI virtualization. However according to my testing, it can only safely be done on Windows 8.1 and Windows 10. The procedure is long and a bit complex for novice users but there is no quick GUI in Windows to force DPI virtualization on for a specific app. Doing the Registry tweak involved in this tweak on Windows 7 or Windows 8.0 caused some strange behaviors and side-effects like system tray icons disappearing so do it at your own risk if you run these OSes. If you are running Windows 8.1 or Windows 10, continue with these instructions.
- Create a blank text file from the New menu by right clicking anywhere e.g. on the Desktop or in a folder. The text file should have the name of the program EXE, which renders too small, followed by the text ".manifest". For example, if the name of the program you use which looks small is SearchTool.exe, the text file you create should be named "SearchTool.exe.manifest". If you don't know the EXE name, right click the Taskbar and open Task Manager while that app is running. Select the app and right click it and click Go to Details. On the Details tab, the EXE name will be shown. Then you can create the text file with the appropriate name. e.g. Processname.exe.manifest.
- Download and install the free Resource Hacker program from here: http://www.angusj.com/resourcehacker/. It is a resource editing tool. The reason we need it is because the app manifest is sometimes stored inside an EXE and Windows prefers this internal app manifest by default. We don't want to ignore the internal app manifest completely if it exists, that is, if the app's developer has added it because besides DPI scaling, it contains other important information about the app's side-by-side configuration and UAC elevation.
- Start Resource Hacker and open the app's EXE in it which looks unusably small on your high resolution display.
- The program (EXE's) manifest resource is usually stored as Resource type 24. Check if this Resource 24 exists. If no such resource #24 exists inside the EXE you opened, then close Resource Hacker and open the file you created in step 1 in Notepad and copy-paste the following text inside it and then save and close the text file:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">False</dpiAware> </windowsSettings> </application> </assembly>
Now skip directly to step 9 for the case where there was no resource 24 inside the EXE you opened and you did the above step.
- If instead, a resource 24 exists in the EXE you opened in Resource Hacker, then expand the node called 24 -> 1 and click on the 1033 item (it is 1033 for English language editions). Right click in the right pane and click Select all. Then right click on the selected text again and click Copy and close Resource Hacker. Don't make any changes to the EXE's internal manifest because the EXE may be digitally signed or compressed. We don't want to modify the original EXE.
- Open Notepad, open the file you created in step 1 in Notepad and paste what you copied from Resource Hacker into Notepad and save this file from the File menu.
- In this file, see if there is a section that has a dpiaware flag set to True (this means the app is claiming to be DPI aware if it looks small on a high DPI display):
<application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True</dpiAware> </windowsSettings> </application>
If it exists, change it from True to False. If no such section related to DPI awareness exists in the app's manifest information, add the above block of text just after the following line in the manifest file:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
- Change dpaware flag from True to False and save the changes to the file and close it.
- Copy the file to the EXE's folder. For example, if the program is installed in C:\Program Files\Contoso\SearchTool.exe, copy the manifest to C:\Program Files\Contoso directory.
- Now we need to tweak Windows to tell it to prefer external manifest files over internal ones embedded inside the EXE. This Registry tweak must be done *only* for Windows 8.1 and Windows 10. If you are running Windows 7 or Windows 8.0 RTM, doing the following Registry tweak can cause unexpected side effects like some system functionality breaking or apps crashing.
- Open Registry Editor (Regedit.exe) in Windows 8.1 or Windows 10. Navigate to the following registry subkey:
HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Windows > CurrentVersion > SideBySide
- Right-click, select NEW > DWORD (32 bit) Value. Give it a name: PreferExternalManifest, and then press ENTER.
- Right-click PreferExternalManifest, and then click Modify. Enter Value Data 1. Click OK. Exit Registry Editor.
- Now restart Windows and run the app for which you added this manifest.
The app should be scaled by Windows DPI virtualization feature and will no longer look too small with unusable controls. The text may look blurry but that's because the app developer didn't update the app for high DPI. Slightly blurry text is tolerable than unreadably small sized user interface with tiny controls.
If the app is still being actively developed, you should contact its developer to so he will actually make it scale properly at high DPI and not just mark the EXE as high DPI aware. If the app is no longer being maintained, then you are out of luck. This is as good as the app will look (with slightly blurry text). However, the app should be usable now.