KF プラグイン・パック by G-SOFT Ver.0.1 ●概要 Kissy(岸本英昭)さん作の二画面ファイラー KF で使えるプラグイン三点セッ トです。DLL をレジストリに登録して、KF の定義ファイルから機能を呼び出し て使います。当然ながら KF ユーザー以外には意味がありません。 指定したファイルの各種タイムスタンプを取得する ExtGetTime.dll、内容を読 み込む ExtReadFile.dll、キロバイト単位で容量を取得する ExtKBCalc.dll の 三点から成っております。 あなたの KF ライフがちょっぴり便利になるかも知れません。 Windows95・98・Me・2000・XP 用です。テストは 2000SP3 と XPSP1 で行って います。ただし、ExtKBCalc.dll は 95・98・Me での動作を保証しません。 ●構成 アーカイブを展開すると、以下の4ファイルができるはずです。 README_G.TXT(これ) ExtGetTime.dll ExtReadFile.dll ExtKBCalc.dll 必要なものを適当な場所に置いて使って下さい。KF のインストールされたディ レクトリ内に COMPONENT とか KFEXT とかいうサブディレクトリを作って置い ておくのが、よろしいんじゃないでしょうか。 ●インストール・アンインストール 使いたい DLL をシステムディレクトリにある regsvr32.exe に渡してレジスト リに登録して下さい。例えば、ExtGetTime.dll を C:\MYSOFT\KF\EXTKF などと いうディレクトリに置いた場合は、 regsvr32 C:\MYSOFT\KF\EXTKF\ExtGetTime.dll とすればよいのです。レジストリへの登録がうまくいった旨のメッセージが英 語か日本語で出たら、成功です。 アンインストールは、regsvr32 に /u 引数を渡して実行した後、ファイルその ものを捨てて下さい。 regsvr32 /u C:\MYSOFT\KF\EXTKF\ExtGetTime.dll とするのです。 ●機能 [ExtGetTime.dll] ファイルの各種タイムスタンプを返します。 ProgID:ExtGetTime.ExtFtime KF からの呼びだし方:KfExtension("ExtGetTime.ExtFtime.1", ファイル名); ファイル名からダブルクォーテーションを外すのを忘れないこと!(例:$P:n) 戻り値:作成日時・最終アクセス日・更新日時の順に並んだ文字列が、 yyyy/mm/dd hh:mm:ss $ yyyy/mm/dd $ yyyy/mm/dd hh:mm:ss という形で戻ります。 従って、KRN ファイル内に以下の関数を実装すれば、望むタイムスタンプを自 由に取り出すことができます。 //========================================================================================= // 各種タイムスタンプの取得 // 引 数: $fl ファイル名(ダブルクォーテーションは必ず外すこと!) // $mode 0:作成日時 // 1:最終アクセス日 // 2:更新日時 // 戻り値:文字列、yyyy/mm/dd hh:mm:ss $mode = 1 のみ yyyy/mm/dd // (c)Hajime Shimada //========================================================================================= str GetFileTimes(str $fl, int $mode) { str $times = KfExtension("ExtGetTime.ExtFtime.1", $fl); str $ret = ""; switch ($mode) { case 0 : { $ret = StrLeft($times, 19); } case 1 : { $ret = StrMid($times, 22, 10); } case 2 : { $ret = StrRight($times, 19); } } return $ret; } 上記の関数を利用して、さらに以下のような関数も利用可能となります。私は デジカメの写真整理に使っています。 //========================================================================================= // カーソル上のファイルと同じ日に更新されたファイル(ディレクトリを除く)を全て // 反対パスの更新日を示す名前のディレクトリに(なければ作成)、移動。 // 引 数:なし // 戻り値:なし (c)Hajime Shimada //========================================================================================= void MoveSameDayFiles() { str $day = StrLeft(GetFileTimes($P:n, 2), 10); str $dirname = $O + "\" + StrLeft($day, 4) + "-" + StrMid($day, 5, 2) + "-" + StrRight($day, 2); int $pos = GetCursorLineNo(0); int $a; int $cnt = GetObjectCount(0); ClearMark(); if (IsExist($dirname) == 0) { MakeDirEx($dirname); } CursorTop(); for($a = 0; $a < $cnt; $a = $a + 1) { if ((IsDirectory($P) == 0) & (StrLeft(GetFileTimes($P:n, 2), 10) == $day)) { MarkFix(); } CursorDown(1); } $a = 0; while ((IsExist($dirname) == 0) & ($a <= 1000)) { Sleep(10); $a = $a + 1; } switch (IsExist($dirname)) { case 0 : { Print($dirname + "が作成できませんでした。"); } default : { ExchangeCursor(); ChangeDir($dirname); ExchangeCursor(); Move(); } } } [ExtReadFile.dll] テキストファイルの冒頭部分の内容を返します。 ProgID:ExtReadFile.ExtRead KF からの呼びだし方:KfExtension("ExtReadFile.ExtRead.1", ファイル名); ファイル名からダブルクォーテーションを外すのを忘れないこと!(例:$P:n) 戻り値:テキストファイルの先頭 512 バイトまで(それ以下のファイルは全文) の内容。ただし、512 バイトの末尾で全角文字がちょん切れるかどうかは判断 しませんので、最後の部分だけ文字化けすることはあります。 ファイルビュアーを起動する前に、ちょっとだけ内容を確かめたい時なんかに、 以下の関数を利用してみて下さい。 また、宮崎さんが発表されている「1行ステータスバーもどきのコンポーネン ト」(http://webclub.kcom.ne.jp/ma/shunji/)と併用すると便利です。 //========================================================================================= // テキストファイル冒頭の内容を表示 // 引 数:ファイル名(ダブルクォーテーションは必ず外すこと!) // 戻り値:なし (c)Hajime Shimada //========================================================================================= void PrintText(str $file) { str $doc; if ((IsDirectory($file)==1) | (IsWordDocument($file)==1)) { $doc = "Not Text!"; } else { $doc = KfExtension("ExtReadFile.ExtRead.1", $file); } Print($doc); } [ExtKBCalc.dll] ファイル/ディレクトリのサイズをキロバイトで返します。 ProgID:ExtKBCalc.ExtKB KF からの呼びだし方:KfExtension("ExtKBCalc.ExtKB.1", ファイル名); ファイル名からダブルクォーテーションを外すのを忘れないこと!(例:$P:n) 戻り値:ファイルないしはディレクトリのサイズをキロバイトで表した文字列。 小数点1桁以下は四捨五入されます。 私は最近 PC でビデオ編集などをしていて扱うファイルサイズが異様に増えた のですが、KF の標準関数にファイルやディレクトリサイズをキロバイトで返し てくれるものがないので、作りました。 結果文字列を StrToInt 関数で変換してやれば、KF の整数型の限界である 2147483647KB = 約 2100000MB = 約 2000GB までの計算が理論上は可能になるはずです。 なお、この ExtKBCalc 単独では 4294967295KB(約 4100GB)までの表示が、理 論上は可能なはずです。従って KF の CalcDirectorySize では正確に表示され なかったサイズも得ることができるようになります(CalcDirectorySize の限 界は 4294967295B = 約 4GB ではないかと思います)。 ファイルがたくさんあるディレクトリの計算は時間がかかります。 以下に私が使っている関数を挙げておきます。 //========================================================================================= // マークファイル(含ディレクトリ)があればその合計ファイルサイズを、 // なければカーソル上のファイルサイズをキロバイトで返す。 // (キロバイトの小数点以下を四捨五入しているので、多少の誤差は出ます) // 引 数:なし // 戻り値:なし (c)Hajime Shimada //========================================================================================= void PrintKB() { int $i = GetMark(0); int $j; int $siz = 0; str $file; Print(IntToStr("%d", $i) + "個のファイル / ディレクトリがマークされてます。"); if ($i == 0) { Print(KfExtension("ExtKBCalc.ExtKB.1", $P:n)); } else { for($j = 0; $j < $i; $j = $j + 1) { $file = GetMarkPos($M, $j); $siz = $siz + StrToInt(KfExtension("ExtKBCalc.ExtKB.1", $file:n)); } Print(IntToStr("%d", $siz) + "KB"); } } ●その他 無料です。転載・複製・再配布などはアーカイブの内容を変更しない限り自由 です。使用に伴う不具合に関して、作者は一切の責任を負いません。ユーザー の方の自己責任でご利用下さい。 サポートに関しては義務とは解しませんが、何かあった時はメールでお知らせ 下されば対応する可能性はあります。 KF の作者、Kissy(岸本英昭)さんに御礼申し上げます。 ●履歴 2003/ 5/24:Ver.0.1 公開。 2003/ 5/23 G-SOFT/島田元 http://members.jcom.home.ne.jp/shimadagen/ http://www.vector.co.jp/authors/VA017034/ mailto:shimadagen@jcom.home.ne.jp