Windows 7 and Windows Server 2008 include the ability for each user to set their font scale. This is fantastic, except for a legacy complication: the old bitmap fonts MS Sans Serif, MS Serif and Courier have specific versions for each font scale, but these are never changed after Windows is installed. In previous versions of Windows, the fonts were replaced with the correct versions for the selected font scale, which is why a system restart was required
This means that these bitmap fonts can be out of sync with the currently selected font scale. This is typically only a problem for legacy applications, but it is ugly in those cases!
More background is available at the MSDN blog http://blogs.msdn.com/b/developingfordynamicsgp/archive/2009/11/25/windows-7-bitmap-fonts-and-microsoft-dynamics-gp.aspx and the follow-up post http://blogs.msdn.com/b/developingfordynamicsgp/archive/2009/12/02/more-on-windows-7-bitmap-fonts-and-dpi-settings.aspx
In our situation, it was even worse: the client was running a Remote Desktop Services environment, where restarting the server was really out of the question.
So I wrote a little fix-it app that dynamically adjusts all the font scaling registry settings and installs the correct fonts for the selected font scale. You may need to log off and log on again, but in most cases, no restart is required. It is setup for 100% and 125% only, and I provide this app here only as a useful tool. No support or warranties, etc, etc. Use at your own risk!
Download Fontsizefix.zip.
Update 1 Jul: As I discussed this blog with Peter Constable, I realised that I didn’t really describe what the tool did. So: fontsizefix updates the various metrics in HKCU\Control Panel\Desktop, and a couple of LogPixels registry settings in HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\CurrentSoftware\Fonts and HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontDPI\LogPixels, updates the fonts key in the registry to point to the correct versions of MS Sans Serif, MS Serif and Courier, and then RemoveFontResource and AddFontResource in order to get the correct version of the font loaded. I’m sure it’s not 100% but it got us over a hurdle with the terminal services environment. For purposes of support, it was easiest to make a tool that did the whole lot rather than document a bunch of registry tweaks which are easy to trip over on, and then we figured we might as well make it available to other users as well…
Thank you, thank you, thank you! Our legacy app was whacking the fonts and this little fixit did the trick.
Glad to be able to help! I should say, this is really an unsupported hack, but if it works for you that’s fantastic 🙂
Hi man, this worked for me like a charm. Can you please consider publishing of registry values it changes? 125% is great but my accountant would prefer still a bit larger app fonts, is there any chance to make it 150% or so?
Thank you very much for this!
Petr, glad this worked for you. At some point I’ll try and put the source to the program on Github, which would then include the registry values and give you the chance to add 150% scaling support. I should reiterate though, that this ‘fix’ is not 100% and is definitely an unsupported configuration…
I’ve just uploaded a working copy to github.com/mcdurdin/font-size-fix. It’s written in Delphi, not very tidy, but has a full list of the registry changes made. The change to 150% would need to be made to the source code.
Hi Mr. Durdin, Would it be possible for you to fix the download link for executable file? I’ve in a similar situation as you were when you developed this fix. I’m not a programmer so unable to make much use of source files on GitHub. Thank you.
I’ve updated the link. Use at your own risk!
We have a client with Server 2008 (initial version not Release 2). They are using it as a Terminal Services server. It seems that when font sizes are changed it changes for all users and they can only be changed by an administrator. It says that it requires a restart but changes occur for everyone that logs in after the change has been made by an administrator.
They also have Server 2008R2 but in this case font changes can be made by users and on a per user basis without restart.
Is there any workaround for the Server 2008 (initial version) behavior so that fonts can be set on a per user basis.
This issue came up after we started moving the client from HP thin client running Windows Embedded 2009 to Windows 10 systems. We know about the zoom options in Windows 10 Remote Desktop but this does not help.
thanks in advance for any thoughts. We were hoping not to upgrade 2008 to release 2 but this may make this upgrade necessary.
I’d be guessing it’d be difficult to work around this issue; from what I can remember the per-user preferences in scaling came around the time of 2008R2.
I use a bookselling database legacy program, Homebase 2.3, which I believe is related to Microsoft Access. Since moving to Windows 10, I cannot find how to get it to resize so that, for instance, the whole of a date and time (19 characters) will display in a column without dragging to resize the column every time I open the program.
On Windows 7 I used the Compatibility tab as follows: “I have tried just about all of the settings on the Compatibility tab, but as far as I can see only two of them solve the problem:
1) Run in 256 colors – whilst this solves the problem it makes both Homebase and everything else on Windows look a mess, so is not acceptable
2) Disable visual themes – this works and it remains to be seen whether it does anything unacceptable but I think it’s OK, it just makes Windows look very slightly more boring and old-fashioned.” As it turned out I didn’t have any problem with method 2, but it’s not available on Windows 10. Method 1 does something different in Windows 10 to what it did in Windows 7 and does not help at all in Windows 10.
Incidentally I did try your little Fontsizefix program, but I think everything was already set to 100% so it didn’t help at all.
Unfortunately I don’t have any good answers for you — unless the author of the program is able to help, you might be out of luck…