喫茶XRAYトップページ

[▲前のスレッド]

[12675] HLPヘルプからCHMヘルプへ変換返信 削除
2019/4/1 (月) 16:03:32 Mr.XRAY
HTML Help Workshop なんですが,[印刷] や [オプション] 等のボタン類の設定が
できませんでした.
HHP ファイルに [WINDOWS] セッションを追加すれば可能であることが分かりました.
で,追加しました.

http://mrxray.on.coocan.jp/Delphi/Others/Win32HLP2ChmHLP.htm#fig37

この [WINDOWS] セッション は

  Wnd1=値1, 値2, 値3, 値4, 値5,,,,

という構造になっています (文字列のパラメータは " で括る).
たまに見かける設定の記述です.
以下のように,ちょっとしたノウハウがあります.参考までに.
CSV 関係の質問,検索ヒットは結構あるので.

    LTextList := TStringList.Create;
    try
      // カンマ区切の文字列を必要な分だけ作成してしまう
      LItemCnt := 20;
      LTextList.CommaText := DupeString(',', LItemCnt - 1);

      // 必要なパラメータだけ設定していく
      LTextList[0]  := AnsiQuotedStr(LHelpTitle, '"');
      LTextList[1]  := AnsiQuotedStr(LFileName + '.hhc', '"');
      LTextList[2]  := AnsiQuotedStr(LFileName + '.hhk', '"');
      LTextList[3]  := AnsiQuotedStr('', '"');
      LTextList[9]  := '0x60720';
      LTextList[10] := '200';
      LTextList[11] := '0xE';
      LTextList[12] := '[200,200,800,600]';
      LTextList[13] := '0x0';
      LTextList[14] := '0x0';
      LTextList[LTextList.Count - 1] := '0';

      // 最初のパラメータの値を代入してからループするのがミソ
      LWinText := LTextList[0];
      for LIndex := 1 to LTextList.Count - 1 do begin
        LWinText := LWinText  + ',' + LTextList[LIndex];
      end;
 
      // LWinText ではなく LTextList.CommaText を書き込むと
      // 余分な " (ダブルクォーテーション) が付加されてしまう
      // もしかしたら方法があるかも知れないけど・・・
      LIniFile.WriteString('WINDOWS', 'WND1', LWinText);
    finally
      FreeAndNil(LTextList);
    end;
 
何だか知らないけれど,
面白いように CHM ヘルプに変換できます.ハマりました (笑)


[12676] Re:HLPヘルプからCHMヘルプへ変換返信 削除
2019/4/1 (月) 16:35:51 Mr.XRAY
 面白いように CHM ヘルプに変換できます.ハマりました (笑)

Google で [HLP CHM 変換] のキーワードでこの記事のページをクリックしたのは
1 件しかありませんでした.
あまり需要はないのかも知れません.
記事を書いた本人 (私です) が楽しんでいるだけかも知れません.ハイ.


[12709] Re2:HLPヘルプからCHMヘルプへ変換返信 削除
2019/4/13 (土) 22:45:27 taka
▼ Mr.XRAYさん
>  面白いように CHM ヘルプに変換できます.ハマりました (笑)
>
> Google で [HLP CHM 変換] のキーワードでこの記事のページをクリックしたのは
> 1 件しかありませんでした.
> あまり需要はないのかも知れません.
> 記事を書いた本人 (私です) が楽しんでいるだけかも知れません.ハイ.


さっき気が付いたのですが
hlpプロジェクトからchmプロジェクトへの変換サポートされていたのですね。

HTML Help Workshop

Help
 Introducing HTML Help
   Converting existing help projects

File : New : Project
Convert WinHelp project にチェック

次へ

hlpプロジェクトと
新しい保存先(chmプロジェクト)を指定して
変換


変換後
(1) Windows-1252の影響だと思いますが
.hhkファイルも文字化けしてインデックスキーワードが完全に壊れます

(2) .htm
charset=Windows-1252
になっていて文字化するので

cygwin(もしくは git bash)が入っていれば一括置換
find ./ -type f -name "*.htm" -exec sed -i -e "s/charset=Windows-1252/charset=Shift_JIS/g" {} \;


英数字の単純なファイルだけのものはプロジェクト変換に成功したのですが
日本語のファイル名をたくさんつかっているプロジェクトは変換に失敗しました。


プロジェクト変換の失敗理由が表示されないので、原因はわかりません。


[12710] Re3:HLPヘルプからCHMヘルプへ変換返信 削除
2019/4/13 (土) 22:57:58 taka
/cygdrive/c/Program Files/HTML Help Workshop

$ grep -R "Windows-1252" ./
バイナリファイル ./gencnv.dll に一致しました

$ strings gencnv.dll | grep "1252"
Western (1252)
text/html; charset=Windows-1252

$ strings gencnv.dll | grep "charset="
text/html; charset=Windows-1252
text/html; charset=Windows-1250
text/html; charset=Windows-1251
text/html; charset=Windows-1253
text/html; charset=Windows-1254
text/html; charset=Windows-1256
text/html; charset=Windows-1257
text/html; charset=Windows-1258
text/html; charset=shift_jis
text/html; charset=big5
text/html; charset=GB_2312-80
text/html; charset=KS_C_5601-1987
text/html; charset=Windows-1255
text/html; charset=Windows-874


HTML Help Workshopは
内部的には、shift_jisという値があるようなので、
charsetを変更できるような裏技があるのかもしれないですね?


[12712] Re4:HLPヘルプからCHMヘルプへ変換返信 削除
2019/4/14 (日) 01:33:47 taka
google検索してもでてこないですし

rtfの文字コード指定したりいろいろしてみましたが

プロジェクト変換の
1252で出力される問題は 無理っぽいですね。

疲れたので寝ます


[12713] Re4:HLPヘルプからCHMヘルプへ変換返信 削除
2019/4/14 (日) 23:36:32 Mr.XRAY
▼ takaさん

> /cygdrive/c/Program Files/HTML Help Workshop
>
> $ grep -R "Windows-1252" ./
> バイナリファイル ./gencnv.dll に一致しました


ひえ〜 !!

> 内部的には、shift_jisという値があるようなので、
> charsetを変更できるような裏技があるのかもしれないですね?


なるほど.dll レベルで書き換え... ほえ !


[12714] Re3:HLPヘルプからCHMヘルプへ変換返信 削除
2019/4/14 (日) 23:40:27 Mr.XRAY
▼ takaさん

> 変換後
> (1) Windows-1252の影響だと思いますが
> .hhkファイルも文字化けしてインデックスキーワードが完全に壊れます


なんですよね.

> 英数字の単純なファイルだけのものはプロジェクト変換に成功したのですが
> 日本語のファイル名をたくさんつかっているプロジェクトは変換に失敗しました。


HTML Help Workshop の変換というかアルゴリズムが不明ですからね.
でも自分でやるとなるとえらいことです.


[12684] 大幅に更新返信 削除
2019/4/8 (月) 20:39:03 Mr.XRAY
少し前におかぽんさんが「見えないところに云々」ということを書いていました.
じゃあ,やってみるか,というこでやってみました.
完全に見えないようにすることはできませんでしたが,HLP ファイルを指定するだけで
処理できるので我慢していただくことにします.

[ 05_HLP ファイルを指定して処理を実行 ]
http://mrxray.on.coocan.jp/Delphi/Others/Win32HLP2ChmHLP.htm#05




[12697] Re:HLPヘルプからCHMヘルプへ変換返信 削除
2019/4/11 (木) 19:24:14 Mr.XRAY
更新しました.

http://mrxray.on.coocan.jp/Delphi/Others/Win32HLP2ChmHLP.htm

(1) ファイルの仮想化の対策コードを強化
(2) 拡張子の登録解除のコードを処理プログラムに内蔵
  [Ctrl] + [Del] で起動.ただし管理者権限で起動した場合のみ有効
(3) HPJ ファイル生成のチェックを忘れていたので追加
(4) 管理者権限で起動した場合は,ヘルプましん側のコンパイル処理を実行
    この時 HTML Help Workshop 側のコンパイルは実行しない
    ヘルプましんの設定が無効の時は HTML Help Workshop のコンパイルは実行

以上でございます.


[12698] Re:HLPヘルプからCHMヘルプへ変換返信 削除
2019/4/12 (金) 11:37:57 Mr.XRAY
更新しました.
起動時のパス名のチェック機能を追加しました.


[12699] Re2:HLPヘルプからCHMヘルプへ変換返信 削除
2019/4/12 (金) 11:44:31 Mr.XRAY
> 起動時のパス名のチェック機能を追加しました.

プロログラムではないですね (汗)
修正しました.


[12700] 他のアプリの操作返信 削除
2019/4/12 (金) 22:52:11 Mr.XRAY
ソースコードの誤字脱字関係をチェックして最 UP しました.

他のアプリの操作なんてやらない方がいいので,あまり参考にはならないとは思いますが,
コーディングで気が付いたことを.

HTML Help Workshop (以下 HHW) はおかぽんさんが書いているように,あさっての方向
に表示できるのですが,処理の進行中に現れるダイアログは,フックでもしなければ
無理です.
ヘルプましんは位置とサイズの操作はできませんでした.
もしかしたら無効になるようになっているのかも知れません.
ソースコードのほとんどは当サイトのサンプルをコピペして編集して使っています.

苦労したのは,HHW の処理終了の検出です.
眺めていたら最後に HHP ファイルを生成して保存しているようなので,
これを処理終了の時期として使用することにしています.
用心のために 500 ms のタイムラグを設定しています.
この時 HHW のウィンドウはあさっての方向にあるので見えません.

ダイアログの操作では 100 ms のタイムラグを Sleep 関数で設定しています.
Sleep 関数で自身のプロセスを停止させた方がいいようです.
タイマー等で同じ 100 ms に設定しても失敗することがあります.

ダイアログのボタン等,コントロール類の ID を調べるのも,もちろん
当サイトのサンプルを使用しています.


# ヘルプましんは Delphi 製です.


[12701] Re:他のアプリの操作返信 削除
2019/4/12 (金) 23:02:02 Mr.XRAY
> # ヘルプましんは Delphi 製です.

Delphi 6 のようです.


[12702] Re:他のアプリの操作返信 削除
2019/4/12 (金) 23:09:38 taka
▼ Mr.XRAYさん
> ソースコードの誤字脱字関係をチェックして最 UP しました.
ここだけの秘密なんですけど
http://mrxray.on.coocan.jp/Delphi/Others/Win32HLP2ChmHLP.htm#04
「」の中の の


> ヘルプましんは位置とサイズの操作はできませんでした.
> # ヘルプましんは Delphi 製です.


こんばんは、Delphi製なら
外部から位置とサイズの干渉できるような気がします。


Universal Extractor

ヘルプましん
は持っていないので
今からインストールしてチェックしてみますね。


[12703] Re2:他のアプリの操作返信 削除
2019/4/13 (土) 00:37:52 taka
▼ takaさん
> ▼ Mr.XRAYさん
> > ヘルプましんは位置とサイズの操作はできませんでした.
> > # ヘルプましんは Delphi 製です.
>
> こんばんは、Delphi製なら
> 外部から位置とサイズの干渉できるような気がします。
>
>

勘違いしてました
ヘルプましんが作成するchmの位置とサイズですよね。
今度気が向いたら、外部から介入できるか調べてみますね。


UACの問題
---------------------------
ヘルプましん
---------------------------
ファイル C:\Program Files\HelpMachine\HHDesigner.INI を作成できません.
---------------------------
OK
---------------------------

C:\Program Files\HelpMachine\に
書き込みできないのは上記の1個だけのようなので
複数人で共有していないのでしたら操作するユーザーに書き換え権限を付与すればいいと思います
UACの問題は 下記の操作で解決します

IF NOT EXIST "C:\Program Files\HelpMachine\HHDesigner.INI" echo. > "C:\Program Files\HelpMachine\HHDesigner.INI"
icacls "C:\Program Files\HelpMachine\HHDesigner.INI" /grant %USERNAME%:RW

管理者権限でplConvertHLPtoHTML
を実行した際に、こそっと icaclsを実行してしまえばいい思います。


うちのパソコンは、
VirtualStoreへの書き込みを拒否にしているので

      LHMachineIniPath := GetHMachineIniFilePath(FHMachineExePath);
の後ろに
      if (LHMachineIniPath = '') And FileExists(ChangeFileExt(FHMachineExePath,'.ini')) then
        LHMachineIniPath := ChangeFileExt(FHMachineExePath,'.ini');
をいれないと iniパスが空欄になるので 動作しなかったです。



[12704] Re3:他のアプリの操作返信 削除
2019/4/13 (土) 08:10:55 Mr.XRAY
▼ takaさん,どうもです.

> IF NOT EXIST "C:\Program Files\HelpMachine\HHDesigner.INI" echo. > "C:\Program Files\HelpMachine\HHDesigner.INI"
> icacls "C:\Program Files\HelpMachine\HHDesigner.INI" /grant %USERNAME%:RW
>
> 管理者権限でplConvertHLPtoHTML
> を実行した際に、こそっと icaclsを実行してしまえばいい思います。


なるほどそういう手がありましたか
WinHelp (HLP ヘルプを Windows 10 で表示可能にするときの WinHlp32.exe の設定に
使っています.
ただ,ヘルプましんを一般ユーザ権限で使用している方はバーチャルストアですからね.
人が操作する設定内容は変更しない方針でいこうと思います.

> VirtualStoreへの書き込みを拒否にしているので

だとすると,起動時と終了時に下図のようなエラーが発生するような気もしますが.
でもこのコードは利用させて頂きます.
Ini ファイルのパス名を取得する関数の最後に追加します.



[12706] Re4:他のアプリの操作返信 削除
2019/4/13 (土) 14:07:52 taka
▼ Mr.XRAYさん
> ▼ takaさん,どうもです.
>
> > IF NOT EXIST "C:\Program Files\HelpMachine\HHDesigner.INI" echo. > "C:\Program Files\HelpMachine\HHDesigner.INI"
> > icacls "C:\Program Files\HelpMachine\HHDesigner.INI" /grant %USERNAME%:RW
> >
> > 管理者権限でplConvertHLPtoHTML
> > を実行した際に、こそっと icaclsを実行してしまえばいい思います。
>
> なるほどそういう手がありましたか
> WinHelp (HLP ヘルプを Windows 10 で表示可能にするときの WinHlp32.exe の設定に
> 使っています.
> ただ,ヘルプましんを一般ユーザ権限で使用している方はバーチャルストアですからね.
> 人が操作する設定内容は変更しない方針でいこうと思います.
>
> > VirtualStoreへの書き込みを拒否にしているので
>
> だとすると,起動時と終了時に下図のようなエラーが発生するような気もしますが.
> でもこのコードは利用させて頂きます.
> Ini ファイルのパス名を取得する関数の最後に追加します.
>


・Microsoft HTML Help Image Editorが
%LOCALAPPDATA%\VirtualStore\Windows\flash.fpr
の書き換えを行おうとする
---------------------------
Microsoft HTML Help Image Editor
---------------------------
Cannot open the file "C:\WINDOWS\flash.fpr".
---------------------------

"%LOCALAPPDATA%\VirtualStore\"を一括拒否している環境の場合は
一時的に拒否を解除して、flash.fprを作らせて
icacls "%LOCALAPPDATA%\VirtualStore\Windows\flash.fpr" /grant %USERNAME%:RW

・.hlpで設定していた画像のクリッカブルマップが解除される
 (.shg)ファイルは、HLPDecompileフォルダにある。
  ※リンク先に設定してた項目のページは、正常に変換されている。

・_RESOURCE\html
変換後のhtmlファイル名は、英数字になり、ファイル名で内容が判断できない。
(htmlを開かないと内容がわからない)
(もともと .hlpの作成時にrtfファイル名情報は失われているのかもしれない)

・コンパイル中に よその画面に 移動すると失敗する。
 [処理開始] 付近に
 変換中はマウス操作しないでください。の警告がいるかも


今回試しに変換して気になったことはこのくらいですね。


[12707] Re5:他のアプリの操作返信 削除
2019/4/13 (土) 14:55:37 taka
面倒になったので
C:\Program Files\HelpMachine
でないところに インストールしなおしました

[12708] Re6:他のアプリの操作返信 削除
2019/4/13 (土) 16:24:02 Mr.XRAY
▼ takaさん,いろいろな確認ありがとうございます.

> C:\Program Files\HelpMachine
> でないところに インストールしなおしました


これも含めて,古い UAC に対応していないアプリの利用の参考になるので,
記事の構成を考えたい思います.

>・.hlpで設定していた画像のクリッカブルマップが解除される

これも書いておかないと.

>変換後のhtmlファイル名は、英数字になり、ファイル名で内容が判断できない。

処理の際に名前を変更できるんですが,どんな名前にしていいか.
もちろん,ページ間のリンクも変更する必要があります.

> [処理開始] 付近に
> 変換中はマウス操作しないでください。の警告がいるかも


う〜む.システム全体でマウスとキー操作を禁止してしまとか ?


[12705] Re3:他のアプリの操作返信 削除
2019/4/13 (土) 08:19:15 Mr.XRAY
▼ takaさん

> > 外部から位置とサイズの干渉できるような気がします。

スミマセンこれは完全に私のポカでした.
TApplication ウィンドウを操作していました (汗)

でもヘルプましんのウィンドウの位置の操作はするつもりありません.
というのは,ファイルを読み込む時に,
ファイルを開くダイアログ表示,ファイル名入力,開くボタンのクリックの
遠隔操作をします.

つまり,ダイアログの位置をあさっての位置に表示して閉じる時に元に戻すという
処理が必要です.自分で起動するのでウィンドウハンドルも取得できますが,
少しぐらいチラついてもいいんじゃない ?
と思っています.

下図は以下のサンプルでテストした結果です.
[ 02_位置とサイズを指定してアプリを起動 - ShellExecuteEx 使用 ]
http://mrxray.on.coocan.jp/Delphi/plSamples/266_App_CreateOpen.htm#02




[▼次のスレッド]
INCM/CMT
Cyclamen v3.82