How to convert HLP files into CHM files

Cristhopher Mancilla picture Cristhopher Mancilla · Apr 25, 2017 · Viewed 31k times · Source

I need some help, I have some .hlp files and I want to convert it to .chm files, as .hlp files don't run on Windows 10.

How can I do that?

Answer

help-info.de picture help-info.de · Apr 26, 2017

I see two or more solutions depending on your requirements:

  • Converting WinHelp (HLP) to HTMLHelp (CHM) or PDF
  • Running WinHelp files on Windows10

Convert WinHelp (HLP) to HTMLHelp (CHM):

A tutorial on my site gives a step-by-step description how to convert WinHelp (HLP) to HTMLHelp (CHM) on a freeware/shareware and "low budget" level. The conversion project example from the download section includes a working structure and example files.

You can of course use a helpauthoring tool (HAT) like Help+Manual, HelpScribble or any other HAT to convert existing WinHelp projects to HTMLHelp.

Run WinHelp on Windows 10:

The WinHelp (.hlp) format has been around since the very early 1990s and is superseded by HTML Help 1.x (.chm). Microsoft strongly advise you move away from WinHelp about ten years ago. But for a test application it's running on my Windows10 machine like a charm.

enter image description here

But some heavy steps to fix the bygone WinHelp Viewer. Please note I don't speak of the HTMLHelp Viewer for *.chm help files here.

Following the solution steps depends on your Windows 10 Version (32 bit or 64 bit). To find out your system type (32 bit or 64 bit), Hold the Windows+R. Type msinfo32 in the Run dialog box that appears and Press Enter.

You know, trying to open a help file (*.hlp) results on a Microsoft Support page.Error opening Help in Windows-based programs: "Feature not included" or "Help not supported".

You'll find a download link for Windows 8.1 but you have to install in a special way for Windows 10 (Windows8.1-KB917607-x64.msu).

  1. Start your command prompt as Administrator (Please NOTE - samples for German here)!
  2. Extract the downloaded .msu file to a temp directory

    md msu-extracted

    expand Windows8.1-KB917607-x64.msu /f:* .\msu-extracted

  3. Extract the contained CAB-File with 279 files in it.

    cd msu-extracted

    md cab-extracted

    expand Windows8.1-KB917607-x64.cab /f:* .\cab-extracted

  4. Depending on your language settings locate the matching MUI-File e.g. use "cs-", “de-” or "en-". People using the x86 variant need to run “dir x86*de-*.”

    cd cab-extracted

  5. Navigate to the given path for your language "... de-de ..." e.g.:

    cd amd64_microsoft-windows-winhstb.resources_31bf3856ad364e35_6.3.9600.20470_de-de_1ab8cd412c1028d0
    
  6. Here we'll find “winhlp32.exe.mui”. Now we need to replace e.g. %SystemRoot%\de-de\winhlp32.exe.mui with our new file:

    takeown /f "%SystemRoot%\de-de\winhlp32.exe.mui"
    icacls "%SystemRoot%\de-de\winhlp32.exe.mui" /grant "%UserName%":f
    ren %SystemRoot%\de-de\winhlp32.exe.mui winhlp32.exe.mui.w10
    copy winhlp32.exe.mui %SystemRoot%\de-de\winhlp32.exe.mui 
    takeown /f "%SystemRoot%\winhlp32.exe"
    icacls "%SystemRoot%\winhlp32.exe" /grant "%UserName%":f
    ren %SystemRoot%\winhlp32.exe winhlp32.exe.w10
    cd ..
    dir *.exe /s
    
  7. Find the right path starting either with amd64 or x86 and navigate to it:

    cd "amd64_microsoft-windows-winhstb_31bf3856ad364e35_6.3.9600.20470_none_1a54d9f2f676f6c2"
    copy winhlp32.exe %SystemRoot%\winhlp32.exe 
    

Edit:

You don't need to replace _none_ in the last cd command step (all single steps tested 2017-09-01 and 2018-08-24 and working on Windows 10).

There is a reset of the workaround described above after a main Microsoft Windows update.

Edit: (copied form comments, thanks to @dxiv)

An alternative to the last couple of steps is to copy the winHlp32 files entirely elsewhere, like C:\etc[\de-de], then re-associate ftype hlpfile=C:\etc\winHlp32 %1 at an elevated command prompt. This avoids clashes with sfc and future windows updates, and HLPs would still work when opened by association (double-click in explorer, or start old.hlp at the cmd prompt).