With the latest releases of Intel processors and especially starting with the 4th generation (“Haswell” processors) to the latest 6th generation (“Skylake” processors) that are shipping with graphic cards that allow for 4k resolution. Well, most people are happy with the extra high definition, there are many others who state that the only complaint is that Windows lacks an ability to scale certain applications when running at High DPI. Windows 10 has done a better job at scaling applications on Ultra HD displays.
Issue:
For Example, I am running at maximum resolution (3200 x 1800) with 250% scale factor and applications, such as Visual Studio 2015 render perfectly. However, other applications scale horribly, like SSMS (SQL Server Management Studio) 2014 which is a complete disaster and lead to this Microsoft Connect. Here is my SQL Server Connection Window, which is not too bad, but it starts to show the tip of the iceberg.
When the connection loads, all is well or at least it appears to be:
As you will start to see, the text gets scaled correctly, but the size of the window and some controls are completely off base, such as the database server settings:
While some
dialog windows are easily fixed by resizing them, some other application windows are completely unusable. For example, the restore database dialog, when locating a backup file, looks like this:
Solution:
Sadly, there are a lot of complaints about this, but not too many articles out there to help you fix the issue. Well, we can say our thanks to Gianluca Sartori (Blog) who has posted a fix to this issue.
He recommends using a “new hope from an old technique”
In Windows Vista, you had two possible ways of scaling applications: with the first one (the default) applications were instructed to scale their objects using the scaling factor imposed by the operating system. The results, depending on the quality of the application and the Windows version, could vary a lot. Some scaled correctly, some other look very similar to what we are seeing in SSMS, with some weird-looking GUIs. In Vista, this option was called “XP style DPI scaling”.
The second option, which you could activate by unchecking the “XP style” checkbox, involved drawing the graphical components of the GUI to an off-screen buffer and then drawing them back to the display, scaling the whole thing up to the screen resolution. This option is called “bitmap scaling” and the result is a perfectly laid out GUI.
Here are the steps to resolve this issue:
Step#1: In order to enable this option in Windows 10, you need to merge this key to your registry:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide]
“PreferExternalManifest”=dword:00000001
Step#2: Then, the application has to be decorated with a manifest file that instructs Windows to disable DPI scaling and enable bitmap scaling, by declaring the application as DPI unaware. The manifest file has to be saved in the same folder as the executable (ssms.exe) and its name must be ssms.exe.manifest. In this case, for SSMS 2014, the file path is “C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\Ssms.exe.manifest“.
Paste this text inside the manifest file and save it in UTF8 encoding:
<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>
<assembly xmlns=”urn:schemas-microsoft-com:asm.v1″ manifestVersion=”1.0″ xmlns:asmv3=”urn:schemas-microsoft-com:asm.v3″>
<dependency>
  <dependentAssembly>
    <assemblyIdentity type=”win32″ name=”Microsoft.Windows.Common-Controls” version=”6.0.0.0″ processorArchitecture=”*” publicKeyToken=”6595b64144ccf1df” language=”*”>
    </assemblyIdentity>
  </dependentAssembly>
</dependency>
<dependency>
  <dependentAssembly>
    <assemblyIdentity type=”win32″ name=”Microsoft.VC90.CRT” version=”9.0.21022.8″ processorArchitecture=”amd64″ publicKeyToken=”1fc8b3b9a1e18e3b”>
    </assemblyIdentity>
  </dependentAssembly>
</dependency>
<trustInfo xmlns=”urn:schemas-microsoft-com:asm.v3″>
  <security>
    <requestedPrivileges>
      <requestedExecutionLevel level=”asInvoker” uiAccess=”false”/>
    </requestedPrivileges>
  </security>
</trustInfo>
<asmv3:application>
  <asmv3:windowsSettings xmlns=”http://schemas.microsoft.com/SMI/2005/WindowsSettings“>
    <ms_windowsSettings:dpiAware xmlns:ms_windowsSettings=”http://schemas.microsoft.com/SMI/2005/WindowsSettings“>false</ms_windowsSettings:dpiAware>
  </asmv3:windowsSettings>
</asmv3:application>
</assembly>
Now after making these changes, look at the backup Window in SSMS, which is now usable again:
As usual, I hope this helps you and I hope you have a great day!