Windows Power-User Series
Have you ever looked at some old 
DOS documents with graphics or special characters and wished you could 
see them as intended in a Windows program rather than having to open it in 
an old DOS Editor using a DOS-window? You could use the OEM font set which 
comes close to the view you'd see in a full-size DOS window. But Notepad is 
stuck with ONLY ONE font, and many other Windows programs don't allow you to 
use the OEM font either!
 Well, by changing the value of one byte 
in Notepad, you can display a file in one of five new fonts; including the 
OEM font shown here:





Notepad actually uses some code from a 
Windows system program called GDI32.DLL to set up how it will display the 
contents of any file it opens. The particular API (Application 
Program Interface) instruction we need to identify in the code 
is called GetStockObject. When Notepad calls upon GDI32 to run 
this specific instruction, it must also send a parameter (or argument) which 
tells it what font to use. Notepad passes the data to GDI32 by first 
placing it in a specific location of an area of memory known to the program 
as The Stack; we say it pushes the data onto the stack. And, 
logically enough, we'll be looking for a PUSH instruction just before the 
CALL to the GDI32 code. Unless you want to try your hand at using whatever 
sophisticated Windows debugging program you might have, then don't 
worry about these details!! It makes sense (and turns out to be true) that 
there'd be only one reference to GDI32.GetStockObject in the Notepad code, 
and for a Windows 95 'B' machine, it will look like this once the code is 
loaded into memory:
004027BE   6A10 
          push 00000010
004027C0   FF1594724000   Call dword ptr [00407294]
Here are some notes (only the details pertaining to fonts shown here) from a 
reference work on Windows API code [My own comments in brackets]:
 The GetStockObject function retrieves a handle to one of the predefined
                             stock pens, brushes, fonts, or palettes.
 HGDIOBJ GetStockObject(
         int  fnObject       // type of stock object
         );
 Parameters
 fnObject -- Specifies the type of stock object. This parameter can be
             any one of the following values [only the fonts shown above
             will be listed here]:
    Value             Meaning
 SYSTEM_FIXED_FONT    Fixed-pitch (monospace) system font already used
  [ 16 = 10h ]        in Windows versions earlier than 3.0 [This is the 
                      font used by NOTEPAD. Note the hex byte 10 that's
                      pushed onto the stack just before the call.]
 OEM_FIXED_FONT       Original equipment manufacturer (OEM) dependent
  [ 10 = 0Ah ]        fixed-pitch (monospace) font. [This gives us an
                      acceptable approximation in Windows programs to
                      the old DOS font characters on most systems.]
 ANSI_FIXED_FONT      Windows fixed-pitch (monospace) system font.
  [ 11 = 0Bh ]        [Might be a nice alternative to the original font.]
 ANSI_VAR_FONT        Windows variable-pitch (proportional space) system
  [ 12 = 0Ch ]        font. [Sure looks tiny; although this might be very
                      useful if you had huge text files to search!]
 DEVICE_DEFAULT_FONT  "Windows NT only: Device-dependent font." [I'm not
  [ 14 = 0Eh ]        exactly sure what this means, but from the pictures
                      above you might conclude that using the 0Eh byte in
                      Windows 95 simply displays the ANSI_FIXED_FONT with
                      a larger size.]
 SYSTEM_FONT          System font. By default, Windows uses the system
  [ 13 = 0Dh ]        font to draw menus, dialog box controls, and text.
                      In Windows versions 3.0 and later, the system font
                      is a proportionally spaced font; earlier versions
                      of Windows used a monospace system font. [ NOTE:
                      By trying many different byte values, I came to the
                      conclusion that using any value not defined on this
                      list produces the same effect as using this font.]
After searching for the string of hex 
digits which makes up the two instructions shown above (6A 10 FF 15 94 72 40 00) and verifying that 
they occur only once in the file, I identified what I've been calling the 
font byte (10h in the PUSH instruction) as offset location 
001BBF for my copy of 
NOTEPAD.EXE (08-24-96 11:11a 34,304 bytes).
If you have Windows 95 B and know how to use a hex editor (see the section 
titled, Making the changes to Notepad Yourself on my page about 
Removing the 'Nag Screen' if you need a free hex 
editor and some help using it), then you've already got all the info you 
need... Just load a COPY of NOTEPAD.EXE into your hex editor and go for it.
For those of you with Win 98, 98SE or NT I'd like to verify my findings 
before releasing them publicly; but feel free to ask for the information if 
you want to try it out! (Use: this online form to 
contact me.) I still need to search through a copy of Win NT's NOTEPAD.
NOTE: Since Notepad isn't very large (roughly 30kb) you might want to make 
a couple different versions saved under different names for whenever you 
might need them: NOTEANSI.exe or NOTEPOEM.exe (at least until I can 
make a menu program for choosing these fonts from within Notepad). Also: 
Notepad appears to run OK from any folder, even a different drive, at least 
on my Win 95 B machine, so you could place these patched copies in separate 
folders.
Posted: 
Tuesday August 22, 2000
Microsoft is a registered trademark, and the Microsoft
Windows logos and screens are trademarks of Microsoft. The phrases
"Windows 95," "Windows 98," "Windows NT," etc.
may also be trademarks of Microsoft. All other logos or trademarks are owned
or are property of their respective owner or owners.
 Although I do 
try to help those in need when time permits, I am not responsible for 
any damage which may be caused by any software or information that you view 
or download from this web site, nor for any information obtained from or 
regarding the personal descriptions or opinions of others on pages that may 
be accessible from this page.