WindowsヘルプからHTMLヘルプへの移行

Windows Vistaの標準ではWindowsヘルプは表示できないということで、HTMLヘルプなどに移行する必要があります。

何度かとまどった経験があるので自分でも忘れないよう、簡単な移行手順をまとめてみました。

  1. 現在のWindowsヘルプ。
    これをHTMLヘルプに移行してみる。

  2. まずは「HTML Help Workshop」を起動。
    [スタート]→[すべてのプログラム]→

→[HTML ヘルプワークショップ]メニューを選択。

3.
「HTML Help Workshop」の画面から、[File]→[New]メニューを選択。
「New」ダイアログが表示されるので「Project」を選択し、新規プロジェクトを作成する。

4.
WinHelpからの変換するため、「New Project」ダイアログで「Convert WinHelp project」をチェック。

5.
「New Project -- Source and Destination Project Files」で、既存のWinHelpプロジェクトファイル、新規作成するHtmlHelpプロジェクトファイル名を指定する。

7.
すると、とりあえずHtmlHelp用のプロジェクトが作成される。

8.
試しに[File]→[Compile]メニューでコンパイルしてみる。

9.
「Create a compiled file」で[Compile]ボタンをクリック。

10.
出来上がったHtmlHelpファイル(*.chm)を見るために、[View]→[Compiled File]メニューを選択。

11.
「View compiled file」でHtmlHelpファイル(*.chm)を選択し[View]ボタンをクリック。

12.
すると、とりあえずHtmlHelpが表示される。
見ての通り文字化けしてたり、目次が無かったり散々なヘルプが作成される。

13.
まず、文字化けから直してみる。
プロジェクトを作成したフォルダ配下に"html"フォルダが作成されている。

14.
"html"フォルダ配下のHTMLをテキストエディタ(メモ帳でもOK)で開いてみる。
METAタグで指定されているcharset属性の値が"Windows-1252"になっているので、
これを"Shift_JIS"に修正する。

変更前:
[html gutter="false"]
<META HTTP-EQUIV=”Content-Type” Content=”text/html; charset=Windows-1252“>

変更後:

<META HTTP-EQUIV=”Content-Type” Content=”text/html; charset=Shift_JIS“>

ちなみに、直接影響は無いと思われるがタグ内の文字(日本語部分)も化けているので、ついでに直しておこう。</p> <pre><code class="language-html"><TITLE>?????</TITLE></code></pre> <p>htmlフォルダ配下全てのHTMLを変換(テキストエディタの全置換を使うと便利)する。</p> <ol start="15"> <li> <p>再びHtml Help Workshopに戻り、コンパイル&表示してみる(上記、8.~11.)。<br /> すると、文字化けは解消されている(筈)。<br /> <img src="/media/img/blog_import_522af13e38362.jpg" alt="" /></p> </li> <li> <p>今度は目次を付けてみる。<br /> WinHelpで作成していた目次構成を真似してHtmlHelpの目次を作成してみる。<br /> <img src="/media/img/blog_import_522af13f4d245.jpg" alt="" /></p> </li> </ol> <p>WinHelpと同じ目次構成で作成してみる。<br /> <img src="/media/img/blog_import_522af11c9a3c6.jpg" alt="" /></p> <ol start="17"> <li> <p>再びHtml Help Workshopに戻り、[Contents]タブを選択すると「Table of Contents Not Specified」ダイアログが表示される。<br /> ここで「Create a new contents file」を選択し[OK]ボタンをクリック。<br /> <img src="/media/img/blog_import_522af140034a8.jpg" alt="" /><br /> すると、ファイル名を聞いてくるので適当に名前を付けて保存する。<br /> (ファイル名はデフォルトの"Table of Contents.hhc"のままでもOK)</p> </li> <li> <p>まず、「はじめに」の部分を作成。<br /> [Insert a heading]ボタン(フォルダアイコン)をクリック。<br /> <img src="/media/img/blog_import_522af141318c4.jpg" alt="" /></p> </li> <li> <p>「Table of Contents Entry」ダイアログが表示されるので、[Entry title:]テキストボックスに"はじめに"と入力し[OK]ボタンクリック。<br /> <img src="/media/img/blog_import_522af1423f2c3.jpg" alt="" /></p> </li> <li> <p>すると"はじめに"フォルダが追加される。<br /> 次に[Insert a page]ボタンをクリック。<br /> <img src="/media/img/blog_import_522af1434fd68.jpg" alt="" /></p> </li> <li> <p>"Do you want to insert this entry at the beginning of the table of contents?"と聞かれてくるので挿入しないよう[いいえ]を選択。<br /> <img src="/media/img/blog_import_522af1445b954.jpg" alt="" /></p> </li> <li> <p>「Table of Eontents Entry」ダイアログの[Entry title:]に、二番目の項目"MemMeterについて"を入力し、[Add]ボタンをクリック。<br /> <img src="/media/img/blog_import_522af1455ae8a.jpg" alt="" /></p> </li> <li> <p>「Path or URL」で対象のHTMLを選択し[OK]をクリック。<br /> ここでは"MemMeterについて"を選択。<br /> <img src="/media/img/blog_import_522af1465df62.jpg" alt="" /></p> </li> <li> <p>「Table of Contents Entry」ダイアログの「File/URLs and their infomation types:」に先ほど選択したHTMLが追加される。<br /> 確認したら、[OK]をクリック。<br /> <img src="/media/img/blog_import_522af14790aa9.jpg" alt="" /></p> </li> <li> <p>すると「Contents」に"MemMeterについて"が追加される。<br /> <img src="/media/img/blog_import_522af148a6410.jpg" alt="" /></p> </li> <li> <p>試しに、この時点でコンパイルし出来上がりを見てみる。<br /> 上記で説明したように、[File]→[Compile]メニューでコンパイル。<br /> [View]→[Compiled File]メニューで作成したHTMLヘルプを表示。<br /> すると、無事「目次」タブが追加されている。<br /> <img src="/media/img/blog_import_522af149a8116.jpg" alt="" /></p> </li> <li> <p>後は、応用を利かせて全ての目次を作成する。<br /> GUIでの操作が面倒&HTMLの知識がある人ならContents作成で保存したファイル("Table of Contents.hhc"など)を直接編集する方法もあり。<br /> 中身は↓こんな感じになっているので<UL>タグ内をコピペしながら編集しよう。</p> </li> </ol> <pre><code class="language-html"><!DOCTYPE HTML PUBLIC “-//IETF//DTD HTML//EN”> <HTML> <HEAD> <meta name=”GENERATOR” content=”Microsoft® HTML Help Workshop 4.1″> <!– Sitemap 1.0 –> </HEAD><BODY> <OBJECT type=”text/site properties”>  <param name=”ImageType” value=”Folder”> </OBJECT> <UL>  <LI> <OBJECT type=”text/sitemap”>   <param name=”Name” value=”はじめに”>   </OBJECT>  <UL>   <LI> <OBJECT type=”text/sitemap”>    <param name=”Name” value=”MemMeterについて”>    <param name=”Local” value=”html\memm15f8.htm”>    </OBJECT>  </UL> </UL> </BODY> </HTML></code></pre> <p>できあがり。</p> <p><img src="/media/img/blog_import_522af14b25a85.jpg" alt="" /></p> <ol start="28"> <li> <p>おまけに、目次のアイコンの変更方法。<br /> 「HTML Help Workshop」(メイン画面)で[Contents]タブを選択した状態で、左側にある鉛筆マークのボタン[Edit Selection]をクリック。<br /> 「Table of Contents Entry」ダイアログが表示されるので[Advanced]タブを選択。<br /> 下側にある[Image Index:]を変更するとアイコンが切り替わる。<br /> <img src="/media/img/blog_import_522af14ce7718.jpg" alt="" /><br /> 後はリコンパイルすればOK。</p> </li> <li> <p>できあがり。<br /> <img src="/media/img/blog_import_522af14dd1f45.jpg" alt="" /></p> </li> <li> <p>これでWindowsヘルプからHTMLヘルプへの移行は完了。<br /> <img src="/media/img/blog_import_522af11b21ca0.jpg" alt="" /></p> </li> <li> <p>あとは呼び出すプログラム側の変更するのみ。<br /> HTMLヘルプ呼出し方法の例をまとめてみた。<br /> VC++:</p> </li> </ol> <pre><code class="language-cpp">#include <htmlhelp.h> HtmlHelp( NULL, ”MemMeter.chm::/html/memm2abc.htm”, HH_DISPLAY_TOPIC, 0);</code></pre> <p>C#:</p> <pre><code class="language-csharp">using System.Windows.Forms; Help.ShowHelp(this, “MemMeter.chm”, @”html\memm2abc.htm”);</code></pre> <p>VB6:</p> <pre><code class="language-vbnet">Global Const HH_DISPLAY_TOPIC = &H0 Global Const HH_CLOSE_ALL = &H12 Declare Function HTMLHelp Lib “hhctrl.ocx” Alias _ “HtmlHelpA” (ByVal hwnd As Long, ByVal lpHelpFile As String, ByVal _ wCommand As Long, ByVal dwData As Long) As Long HTMLHelp Me.hwnd, “MemMeter.chm::/html/memm2abc.htm”, HH_DISPLAY_TOPIC, 0&</code></pre> <p>これで呼び出しもOK。</p></div> <ins class="adsbygoogle os-ad" style="display:block" data-ad-client="ca-pub-0973062466336386" data-ad-slot="1730393553" data-ad-format="auto" data-full-width-responsive="true"></ins> <script>(adsbygoogle=window.adsbygoogle||[]).push({});</script> <p style="margin-top:32px"><a href="/blog">← ブログ一覧へ戻る</a></p> </article> </main> <footer class="site-footer"> <div class="wrap"> <div class="footer-grid"> <div class="footer-brand"> <a class="brand" href="/"><b>Osada<span>Soft</span></b></a> </div> <div class="footer-col"> <h5>ソフトウェア</h5> <ul> <li><a class="footlink" href="/software">ソフト一覧</a></li> <li><a class="footlink" href="/software/geteventlog">EventLogTimesheet(勤務時間取得ツール)</a></li> <li><a class="footlink" href="/software/pictoroam">PictoRoam</a></li> <li><a class="footlink" href="/software/petitcalendar">PetitCalendar</a></li> <li><a class="footlink" href="/software/getgpsinfo">画像位置情報取得ツール</a></li> </ul> </div> <div class="footer-col"> <h5>ブログ</h5> <ul> <li><a class="footlink" href="/blog">新着記事</a></li> <li><a class="footlink" href="/blog/tag/F1">#F1</a></li> <li><a class="footlink" href="/blog/tag/C%23">#C#</a></li> <li><a class="footlink" href="/blog/tag/%E6%9D%B1%E6%B5%B7%E9%81%93">#東海道</a></li> <li><a class="footlink" href="/blog/tag/%E3%83%95%E3%82%A3%E3%83%83%E3%83%88%E3%83%8D%E3%82%B9">#フィットネス</a></li> </ul> </div> <div class="footer-col"> <h5>サイト情報</h5> <ul> <li><a class="footlink" href="/relation/mysite">管理サイト</a></li> <li><a class="footlink" href="/contact">お問い合わせ</a></li> <li><a class="footlink" href="/relation/reciprocal">相互リンク</a></li> <li><a class="footlink" href="/privacy">プライバシーポリシー</a></li> </ul> </div> </div> <div class="footer-bottom"> <span>© 1998–2026 OsadaSoft</span> <span style="display:flex;gap:18px"> <a class="footlink" href="/privacy">プライバシーポリシー</a> <a class="footlink" href="/sitemap">サイトマップ</a> <a class="footlink" href="/feed">RSS</a> </span> </div> </div> </footer> <script> function osTheme(){var d=document.documentElement,t=d.getAttribute('data-theme')==='dark'?'light':'dark';d.setAttribute('data-theme',t);try{localStorage.setItem('theme',t);}catch(e){}document.getElementById('themeIcon').textContent=t==='dark'?'☀️':'🌙';} document.getElementById('themeIcon').textContent=document.documentElement.getAttribute('data-theme')==='dark'?'☀️':'🌙'; // mobile menu (hamburger) toggle function osNav(b){var h=document.querySelector('.site-header'),o=h.classList.toggle('nav-open');b.setAttribute('aria-expanded',o?'true':'false');b.textContent=o?'✕':'☰';} // page-wide ambient glow following the cursor (behind all content) (function(){var root=document.documentElement,raf=0,mx=50,my=35; window.addEventListener('mousemove',function(e){ mx=e.clientX/Math.max(1,window.innerWidth)*100; my=e.clientY/Math.max(1,window.innerHeight)*100; if(!raf)raf=requestAnimationFrame(function(){raf=0;root.style.setProperty('--mx',mx.toFixed(1)+'%');root.style.setProperty('--my',my.toFixed(1)+'%');}); },{passive:true}); })(); // hover-zoom content images: reveal the square corners + enlarge toward natural // size, always giving a visible pop, without reflowing the page (transform only). (function(){ var SEL='.post-body img'; function on(img){ if(img.classList.contains('is-zoom')) return; var dw=img.clientWidth, dh=img.clientHeight; if(!dw||!dh) return; if(dw<64||dh<64) return; // skip tiny inline icons (favicons) var nw=img.naturalWidth||dw, nh=img.naturalHeight||dh; var capW=(window.innerWidth*0.94)/dw, capH=(window.innerHeight*0.92)/dh; var k=Math.min(nw/dw, capW, capH); // enlarge to natural size, fit viewport if(k<1) k=1; var minPop=Math.min(1.2, capW, capH); // guarantee a small visible pop even if ~natural if(k<minPop) k=minPop; k=1+(k-1)*0.5; // gentle: about half the previous enlargement img.style.transform='scale('+k.toFixed(3)+')'; img.classList.add('is-zoom'); } function off(img){ img.style.transform=''; img.classList.remove('is-zoom'); } document.addEventListener('mouseover',function(e){ var t=e.target; if(t&&t.matches&&t.matches(SEL)) on(t); }); document.addEventListener('mouseout',function(e){ var t=e.target; if(t&&t.matches&&t.matches(SEL)) off(t); }); })(); </script> </body> </html>