LZHエクスプローラ for Windows95,WindowsNT

このプログラム、LZHエクスプローラはWindows95,WindowsNTのシェルネームスペースを拡張するDLLです。

LZHエクスプローラを組み込むことにより、LZHファイルがエクスプローラからディレクトリなどのフォルダと同じような感覚で扱えるようになります。Microsoft社から提供されているフリーソフトのPowerToysの中にあるCABVIEWのLZHファイル版みたいなものです。LZHエクスプローラはまだまだ粗削りなプログラムですが、コンセプトはCABVIEWと同じくシェルへの融合です。

LZHエクスプローラは日本語版のWindows95とWindowsNT4.0で動作します。

LZHファイルでダウンロード lhexp200.exe 128,729バイト
自己解凍EXEファイルでダウンロード lhexp200.exe 130,416バイト

1. LZHエクスプローラの特徴
2. インストール方法
3. 使い方
4. アンインストール方法
5. 今後の展望、わかっているバグなど
6. 送金について
7. その他
8. 履歴

1. LZHエクスプローラの特徴

LZHエクスプローラの最大の特徴は、LZHファイルをあたかもディレクトリであるかのように扱える点です。エクスプローラシェルに完全に融合するので、特に意識しなくても圧縮、解凍の処理を行えます。

  • LZHファイルをダブルクリックすれば内容がフォルダとして開き、中にあるファイルがアイコンで表示されます。
  • このアイコンをどこかへドラッグアンドドロップすればドロップ先のディレクトリに解凍されます。
  • このアイコンをダブルクリックすれば、テンポラリファイルへ解凍されてから関連付けられたアプリケーションが自動起動します。
  • LZHファイルのフォルダの中にファイルをドロップすればそのファイルが圧縮されます。
  • もちろん圧縮されているファイルのプロパティを見ることもできます。
  • LZHファイル内のディレクトリ構造にも対応しています。ディレクトリごとドラッグアンドドロップすれば、まとめて圧縮や解凍ができます。
  • またLZHファイルを開いていなくてもLZHファイルのアイコンの上にファイルをドロップすれば、自動的に圧縮されます。
  • ファイルを右ボタンでドラッグアンドドロップすると、ドロップ先のディレクトリにコピー、移動、ショートカットの作成するというポップアップメニューが現れますが、LZHファイルの場合にドロップ先ディレクトリに解凍というメニューも現れるようになります。


ダブルクリックすると


中身がフォルダとして開きます。

LZHエクスプローラは圧縮法として-lh4-と-lh5-と-lh6-と-lh7-に応し、それぞれの方式で圧縮と解凍できます。またレベル0,レベル1,レベル2,レベル3の各ヘッダレベルを取り扱うことができます。32ビットプログラムですから、もちろん長いファイルネームをそのまま保存して圧縮することもできます。レベル3ヘッダを使用すれば、3種類のタイムスタンプ(ファイル作成日時,最終更新日時,最終アクセス日時)をすべて保存することができます。

圧縮、解凍のエンジンを内蔵しているため、外部のDLL等を呼び出すためのオーバーヘッドが発生しません。特に解凍のエンジンは100%アセンブリ言語で書かれており高速です。

しつこいですがLZHエクスプローラは、「エクスプローラ風のツール」ではありません。本物のエクスプローラにLZHファイルを直接解釈させるためのシェル拡張プログラムです。


2. インストール方法

LXSETUP.EXE を実行すれば、LZHエクスプローラがインストールされます。

LZHエクスプローラは、LZHファイルの圧縮、解凍のエンジンを内部に持つことにより、単体で(Windows95やWindowsNT標準の環境だけで)動作できます。LZHエクスプローラを動作させるために、他に必要になるプログラムやDLLはありません。LZHエクスプローラをインストールしたらすぐ使うことができます。

LZHエクスプローラはWindows95,WindowsNT両用バイナリです。どちらのOSでもこのパッケージで動作します。

WindowsNTでは、シェルエクステンションをインストールするためには管理者の権限をもったユーザーでログオンしている必要があります。


3. 使い方

基本的に、操作方法はエクスプローラそのものです。扱う対象がディレクトリからLZHファイルになるだけで、操作感覚も含めてエクスプローラと同様の機能が実現されます。


4. アンインストール方法

コントロールパネルのアプリケーションの追加と削除から [LZHエクスプローラ]を選んで削除できます。


5. 送金について

LZHエクスプローラはシェアウェア扱いのamiwareです。送金は必須ではありませんが、レジストしていない場合には一部の機能が制限されます。制限される機能は以下の通りです。

レジストしていない状態では圧縮法として無圧縮の-lh0-しか選択できません。-lh0-形式は無圧縮ですが、単なるアーカイバとしては十分使用できます。なお、ファイルの解凍に必要な機能には制限はありません。

amiware作者の方は送金なしで使用していただいてかまいません。連絡していただければこちらで登録します。

送金は、郵便局の郵便振替で払い込んでください。振替用紙は郵便局備え付けのものを使用して下さい。振替手数料は送金者側で負担してください。金額は2000円です。

作者は学生なのでクレジットカードを持っていません。当然、NIFTY-Serveは銀行口座引き落としで使わせていただいてるのですが、NIFTY-Serveのシェアウェア送金代行サービスはクレジットカード会員でないとシェアウェア作者登録ができません。お手数ですが、郵便局の郵便振り替えでお願いします。

送金先郵便振替口座00100-1-721182
河野 健

通信欄には「LZHエクスプローラの代金」と書き、読みやすい文字で正確にメールアドレスをお書き下さい。また、あわせて好きなセーラー戦士の名前もお書き下さい。イラストでも可です。振替用紙が到着次第、メールでユーザ登録の際に必要となるパスワードをお送りします。


6. 今後の展望、わかっているバグなど

  1. [表示(V)][オプション(O)...]の設定がすぐに反映されないことがあります。新しいフォルダの開きかたが、すぐに反映されません。対処法はないので、これは仕様です。
  2. -lh4-,-lh5-,-lh6-,-lh7-しか解凍できない。いずれ...古い-lh6-も解凍できないんですけど、実害はないでしょう。
  3. WindowsNTの場合、ファイルのセキュリティ情報できるようする。LZHファイルでのセキュリティ情報の保存方法がたぶん決まっていないので...適当な拡張ヘッダに自己相対形式で保存すればいいようなきがします。
  4. WindowsNT ServerのAppleTalkシェアに対応する。NTFSのリソースフォークを読み取る方法がわかりませんです。
  5. フォルダのメニューを作る。フォルダの[ファイル(F)]メニューでLZHファイル内にディレクトリを作れるようにするつもりです。
  6. ディレクトリのコンテキストメニューを拡張する。ディレクトリのコンテキストメニューから、そのディレクトリ以下を指定したファイル名のLZHファイルに圧縮するという機能をつくる予定です。これは比較的かんたんのはずなんですけど。コモンダイアログで複数選択可能で、ファイルとディレクトリを同時に選択できるようにする方法がないかと思案中...コモンダイアログをフックする方法ではうまくいきませんでした。
  7. 圧縮ファイルがリードオンリ属性で格納されているときドラッグアンドドロップ時に移動してもよいかシェルが聞いてきてしまうなにかいいアイディアありませんかねぇ?テンポラリファイルを使わないでシェルにファイルの内容を渡せればいいのですけど。"FileContents"と"FileGroupDesc"だけで渡すとタイムスタンプを受け取ってくれないのです。
  8. 圧縮されたショートカットの自動起動圧縮されたショートカットをダブルクリックしたとき、ショートカットのリンク先ドキュメントを自動起動できるようにする。
  9. 圧縮されたファイルへのショートカット作成ショートカットのリンク先がLZHファイル内の圧縮されたファイルだったとき、ショートカットのダブルクリックで自動的にリンク先ファイルをLZHファイルから解凍してきて、それからアプリケーションを自動起動できるようにする。
  10. 圧縮や解凍中に同名ファイルが存在した場合に、リネームや上書きの確認のダイアログが出ている最中に、別スレッドを起動して支障のないファイルの圧縮や解凍を継続する。凝りすぎ(笑)
  11. シェルの標準動詞のprintをサポートする。手元にプリンタがないので確認できません。そんなに難しくはないはずなんですけど。
  12. ごみ箱の中身を圧縮できるようにする。ごみ箱からドラッグしてきたものを圧縮するときに、ファイルネームのマッピングを解決していません。それをなんとかしないと。

7. その他

LHAは吉崎栄泰さんが作成されたフリーソフトウェアです。

このプログラム、LZHエクスプローラはamiwareです。マーキュリー規約に準拠します。


連絡先

NIFTY-ServeBXA03577@niftyserve.or.jp
日経MIXt.kono@mix.or.jp

8. 履歴

LZHエクスプローラのバージョンアップ履歴です。

ver 1.00 96/ 7/ 1
ファーストリリース

ver 1.01 96/ 7/ 2
ドラッグドロップで解凍がまれに失敗していたのを修正

ver 1.02 96/ 7/ 4
LZHファイル内のウォークを大幅に高速化

ver 1.03 96/ 7/ 8
ディレクトリごとドラッグアンドドロップの圧縮で失敗していたのを修正

ver 1.04 96/ 7/11
LZHファイルのプロパティシートを拡張
LZHファイル内ディレクトリのコンテキストメニューからそのディレクトリ以下のファイルの解凍をできるようにした
登録されているファイルの拡張子は表示しない設定を有効にした
解凍時にタイムスタンプが9時間ずれることがあったのを修正(理由は...お察しの通りです)
圧縮ファイルやディレクトリ名のインプレース編集ができなくなっていたのを修正
テンポラリファイルを削除するタイミングを変更
フォルダ進入時に[CTRL]キーの押し下げをみるようにした
複数ファイルを同時に圧縮するときに圧縮結果がおかしくなることがあったのを修正
暗黙のうちに生成されたディレクトリと-lhd-で作成されたディレクトリの整合性がとれていないことがあったのを修正

ver 1.05 96/ 7/22
圧縮・解凍が失敗することがあったのを修正
コンパイラをVisualC++4.1に変更
テンポライファイルを使わない解凍の機能を削除。常にテンポラリファイルを使うように変更
心持ち高速化

ver 1.06 96/ 7/22
ディレクトリ名が絶対パスで記録されているLZHファイルを開くとき、ディレクトリ構造を間違って認識することがあったのを修正
1ビット/ピクセル、2ビット/ピクセルのアイコンを展開できない場合があったのを修正
テンポラリファイルが残ることがあったのを修正

ver 1.07 96/ 7/28
ドラッグアンドドロップの時に作成されたテンポラリファイルに対してショートカットを張れないようにした
圧縮の処理を別スレッドにして、ドラッグアンドドロップ元プロセスを早めに開放するようにした
圧縮時にプログレスバーとアニメーションとそれまでの平均圧縮率を表示するようにした。
複数のドラッグアンドドロップを受け入れられるように、LZHファイルへのアクセスにクリティカルセクションを使い、圧縮の処理はマルチスレッド化した。
圧縮できないファイルを-lh0-で格納するかどうかの判定を圧縮中に行わず、最後まで圧縮を試みてから判定していたことがあったのを修正。
LZHファイル自身のアトリビュートが保存されないことがあったのを修正
LZHファイルのプロパティシート拡張で参照カウントまわりのバグを修正
圧縮ファイルに作成日時、アクセス日時が記録されていないばあいに正常に圧縮できないことがあったバグを修正

ver 1.08 96/ 8/ 3
圧縮の進行状況をしめすダイアログで圧縮の途中キャンセルができるようにした。
InterlockedIncrement(), InterlockedDecrement()を使わないでDLLの参照カウンタを増減させて所があったのを修正。
レジストリにキャッシュストリームに優先して、起動時の表示モードを強制的に設定できるようにした。
詳細表示時に、オリジナルのファイルサイズが0バイトのファイルの圧縮率を表示しようとして、0割りで落ちていたのを修正。ケアレスミスです。ごめんなさい。
圧縮時、テンポラリファイルからの書き戻しを最適化した。

ver 1.09 96/ 8/20
大きなファイルの圧縮率が極端に悪くなる場合があったのを修正。

ver 1.10 96/ 8/24
2バイトキャラクタを含むファイル名をちゃんと扱えていない場所があったのを修正。
LZHファイルに[貼り付け(P)]でクリップボード経由の圧縮ができるようにした。

ver 1.11 96/ 9/ 5
レベル1,2ヘッダでアトリビュートの指定でディレクトリビットが立っていない-lhd-ヘッダに対処。
コンテキストメニューから[解凍(E)]を選んで解凍したときに、すでに同名ファイルがあったときの上書き確認ダイアログボックスの表示がおかしいかったのを修正。SHELL32.DLLではタイムスタンプやサイズ、アイコンまで表示されているので、それにあわせるつもりですがとりあえず現在ではファイル名だけを表示しています。タイムスタンプやサイズは次回かならず。アイコンは、解凍してみないとアイコンイメージを作れないので、どうするか検討中。
インストーラが設定するレジストリのキー名で、shellex\PropertySheetHandlersとするところをshellex\PropertySheetHandlerとしていたためLZHファイルのプロパティシートが拡張されていなかったのを修正。

ver 1.12 96/ 9/10
どうも動作が不安定になったので、コンパイラのオプションでサイズ優先のオプティマイズを指定するのをやめた
圧縮しようとしたディレクトリと同じファイル名のファイルがすでにLZHファイル内に存在していた場合、リネームを促すダイアログの表示がおかしかったのを修正
上書き圧縮確認のダイアログで、すべて上書き圧縮を指定するためのラジオボタンを有効にした。
リネームが完了していないときには、OKボタンを押せないようにした。
リネーム時に入力されたパス名に、ファイル名として使えないキャラクタが含まれないようにした。
ディレクトリ解凍時に解凍先にディレクトリを作成する必要があったとき、2バイト文字のディレクトリを作成できないことがあったのを修正。
コンテキストメニューから[解凍(E)]を選んだときの上書き確認ダイアログボックスに、ファイルのタイムスタンプ等を表示するのはまた次回に先送りになってしまいました。ごめんなさい。

ver 1.13 96/ 9/21
ver 1.12で、[表示(V)]の[オプション(O)]のフォルダプロパティシートに[起動時にアイコンの自動整列を設定する(A)]チェックボックスを追加していました。書き忘れ。
コンテキストメニューから[解凍(E)]を選んだときの上書き確認ダイアログボックスに、ファイルのサイズとタイムスタンプを表示すようにした。
ファイルサイズ表示の書式を見直しました。Windowsユーザーインターフェイスデザインガイドを見ても、ファイルサイズの書式の標準は記述されていませんでした。またInternetExplorer3.0のキャッシュフォルダを提供するCACHEVU.DLLのファイルサイズ書式はSHELL32.DLLと同じではありません...CACHEVU.DLLの方が詳しいのですがSHELL32.DLLの方が僕の主観では見やすいような気もするので、もしかしたらLZHエクスプローラの書式もSHELL32.DLLとあわせるためにまた変えるかもしれません。
LZHファイルを開いたとき、1MB以下のファイルをすべて自動的にテンポラリファイル解凍してそのファイル固有のアイコンイメージを表示する設定を追加しました。マシンパワーに余裕がある方はどうぞ。

ver 1.13 96/ 9/21
LZHファイルの構造がおかしかったとき、先頭128バイトを読み飛ばしてリトライしてみるようにした。

ver 2.00 97/ 3/10
WindowsNT4.0に対応。
いろんなところのエラーチェックを強化した。
いろんなところで高速化した。
コンパイラをVisualC++4.2に変更した。
DLLのセクション数を減らしてメモリ効率をよくした。
LZHエクスプローラを開いている間にも、他のプロセスがLZHファイルを読み書き可能のシェアリングでファイルをオープンできるようにした。
圧縮の操作を行った直後から圧縮が完了するまでの間も、圧縮するファイルを読み込みでならシェアリングでファイルオープンできるようにした。
Cランタイム関数を極力使わないで、Windowsのシステムサービスで提供される関数を使うようにした。
圧縮ファイルのアイコンをダブルクリックすると、テンポラリファイルに解凍して関連付けられたアプリケーションを起動するようにした。また、起動されたアプリケーションの終了時にはアップデート圧縮できるようにした。
圧縮ファイルのコンテキストメニューからクィックビューアを起動できるようにした。
ドラッグアンドドロップによる圧縮時に、アイコンに[+]マークが付くようにした。
圧縮ファイルのプロパティシートにコメントの編集ページを追加した。
拡張子.CMDについてもデフォルトのアプリケーションアイコンを表示するようにした。
暗黙のうちに定義されたディレクトリを含む複数のファイル・ディレクトリのプロパティシートを開いて属性を変更しようとすると、暗黙のうちに定義されていたディレクトリのために-lhd-ヘッダが新たに作成されるが、このとき常にヘッダレベル0で作成されていたのを[表示(V)]の[オプション(O)]のプロパティシートで設定されたデフォルトのヘッダレベルで作成するように変更した。
各種設定をHKEY_LOCAL_MACHINEからHKEY_CURRENT_USERに移し、ユーザーごとに違う設定を許すようにした。
IDataObjectインタフェースで提供するメディア形式にIStreamを追加した。
IDataObjectインタフェースで提供するフォーマット形式にUNICODEベースのものを追加した。
IShellIconインタフェースを実装して、フォルダ内のアイコンの表示を高速化した。
IExtractIconインタフェースのUNICODE版も実装した。
上書き圧縮が失敗することがあるバグを修正した。
上書き圧縮の確認ダイアログのメッセージが化けることがあったのを修正した。
圧縮中のファイルがあるディレクトリが進行表示ダイアログに表示されなくなることがあるのを修正。
ごくまれに、アイコンイメージの解凍に失敗することがあったのを修正した。
LZHファイルを右ボタンでドラッグアンドドロップして、[ここに解凍(X)]でドロップ先フォルダに解凍するとき、-lh1-などLZHエクスプローラが解凍できない圧縮法で圧縮されていたファイルは0バイトのファイルとして作成されてしまうバグを修正した。
圧縮ファイルを選択していないときに、[ファイル(F)]の[プロパティ(R)...]で表示されるLZHファイルのプロパティシートの内容が未完成のままになっていたのを修正した。
圧縮ファイルを選択していないときに、コンテキストメニューから新規ファイルの圧縮ができるようした。
複数のディレクトリだけに対してプロパティシートを開くと、0除算エラーで落ちていたのを修正した。
LZHファイルのプロパティシートの[ファイルの概要]ページで、横棒のデザインが[ファイルの情報]ページと異なっていたのを修正した。
レジストリに登録するCLSIDの16進数のAFを大文字で登録するようにした。