-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- WZ4.0用電信八号メール閲覧マクロ Den8Wz4.c Version 2.20 Copyright (C) 2001-2006 PATA / t-aizawa http://www5d.biglobe.ne.jp/~pata/ -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ■はじめに --------------------------------------------------------------------- このプログラムは電信八号((C)ISHIOKA,Takamitsu/Den8Club)で受信した メールを閲覧するためのWZ4.0/WZ5.0用マクロです. 私は以前から,y.mikome氏とM.Ishida氏が作成・改変された電信八号 ビュワー for WZ 3.0(ViewDEN8.c)を使用させていただいていました. 数ある電信八号用ビュワーの中で,機能もさることながら,EDITORとの 親和性やソース公開によるカスタマイズの自由さ等がとても気に入り, 主EDITORをWZ4.0に移行した後も,ViewDEN8を使用するためだけにWZ3.0を アンインストールせずにいたものです. いつかViewDEN8をWZ4.0で使用できるようにしたいと考えていたのですが, マクロ仕様の差に挫折してしまい,Windowsプログラミングの勉強も 兼ねて一からTXEアプリとして作成してみました. WZ4.0/5.0ユーザならWZ MAILを使用している方が多いでしょうから(私も 一瞬移行を検討しましたが,電八の環境に身体が慣れきってしまって いるため諦めました),今さらあまり需要はないような気もしますが, せっかく作ったので公開します. ■動作環境 --------------------------------------------------------------------- 開発環境は以下のとおりです. OS: Windows XP Professional SP2 電信八号: Version 32.1.6.0 074 + private patch WZ EDITOR: Version 5.02D WZ5.02Dが動作している環境ならば,OSは問わずに使用できるのでは ないかと思いますが,コモンダイアログやらShellAPIやらを使用して いますので,IE4.0以降がインストールされていないと正常に動作 しないところがあるかもしれません. また5.02D未満のVersionのWZで正常動作するか(そもそもコンパイルが 通るのか),は確認していません.うまく動作しない場合は対応させ られるかもしれませんので,ご連絡いただければ幸いです. 電八はなるべく最新Versionを使用した方がよいでしょう.でないと 使用できない機能があったり,正常に動作しなかったりするかも しれません. なお,後述しているメール添付書庫ファイル閲覧機能を使用するには, Unlha32.dll,Unzip32.dll,Tar32.dll,Cab32.dllが必要です.また, ファイルをLZH圧縮/ZIP圧縮して添付する機能を使用するには, Unlha32.dll/Zip32j.dllが必要です. ■インストール --------------------------------------------------------------------- (1)WZ EDITORのマクロフォルダにDen8Wz4.txeをコピーし,WZ EDITORの ルートフォルダにDen8Wz4.DLL,OleDragDrop.DLLをコピーします. ※Den8Wz4.c,Den8Wz4.h,OleDragDrop.hはなくても動作します. (2)電八の[設定]メニューの[サーバに依存しない設定]で,メール表示用 プログラムの欄に, \WZ_MAIN.EXE /fDen8Wz4.txe /mail"%s" を,DDE欄に open を,それぞれ指定します.は各自の 環境に合わせて書き換えてください. (3)電八からメールを表示させると,Den8Wz4が起動します.初めて起動 すると,電八(DENSHIN8.EXE)とペン猫OP1(PNEKOOP1.EXE)の場所を 訊ねるダイアログが表示されますので,フルパスで指定してください. ペン猫OP1を使用しない場合は,ペン猫OP1の場所は空欄のままでも かまいません. なお,起動時にWZ EDITORのマクロフォルダに,設定ファイルである Den8Wz4.iniが作成されます. ※ペン猫OP1とは,山本和隆氏が作成された,電八のメールを一括して スレッド表示するためのソフトウェアです. ■アンインストール --------------------------------------------------------------------- 電八のメール表示用プログラムの設定を元に戻して,インストール時に コピーしたDen8Wz4.txe,Den8Wz4.dll,OleDragDrop.dllと,最初の起動時に 自動的に作成されるDen8Wz4.iniを削除してください.レジストリは使用して いません. ■使い方 --------------------------------------------------------------------- 特にたいした機能も備えていませんので,ちょっと触っていただければ だいたい判ってしまうと思いますが,一応ざっと記述しておきます. (とか言ってる内にどんどん膨らんできてしまいましたが…) ○基本 - 電八の[メール]-[表示]でも開けますし,メールフォルダから直接 Den8Wz4ウィンドウにドラッグ&ドロップしても開けます. - ツールバーのボタン,または「■機能一覧」にあるキー入力で メールやフォルダの操作をすることができます. ○タブ - メールの内容は,電極Z号のMetaViewのようにメールのヘッダと 本文と添付ファイルがそれぞれタブとして表示されます. ※Multipartの解釈については,独学&試行錯誤の産物ですので, きっとうまく表示できないメールもたくさんあると思います. - タブを右クリックするとメニューが表示され,そのタブのPartを 開いたり保存したりできます.左ダブルクリックで,メニューを 表示せず直接開けます. ○メールのヘッダと本文の表示 - メールのヘッダ(Headerタブ)と本文の表示にはWZのエディット ウィンドウを使用しており,デフォルトでは"標準"の文書設定と なります.使用する文書設定は,設定ダイアログで変更できます. - WZ EDITORのキーカスタマイズ設定もそのまま使用できますが, Den8Wz4の方で機能を割り当てわれているキーはそちらが優先 されますのでご注意ください.デフォルトでDen8Wz4の機能が 割り当てられているキーは「■機能一覧」に記述してあります. - クリッカブルURL/E-mail/一部のMessage-IDに対応しています. 設定ダイアログで,クリックするときに同時に押すキーを設定 することができます.デフォルトではCtrlキーになっています. - URLが長すぎて途中で改行が入ってしまっている場合にも,行を またがって範囲選択して右クリックすることで,1行のURLとして 開くことができます. ○ヘッダバー - ツールバーの下に,特定のメールヘッダがそれぞれEditboxに表示 されます.Den8Wz4ではこれらをまとめてヘッダバーと呼んでいます. - 表示されるヘッダはデフォルトでは,From,To,Cc,Date,Subject, X-Mailerの5種類です.表示されるヘッダを変更する方法は後述の 「■カスタマイズ」を参照してください. - ヘッダバーの各Editboxはドラッグすることで好みの順序・配置・ 表示幅にすることができます. - 設定ダイアログで指定することにより,Dateヘッダをyy/mm/dd形式に 変換して表示できます. ○フォルダツリー - 電八メールフォルダがツリー表示されます.ここで表示されるのは, DENSHIN8.INIの[Folder]セクションに記録されているメールフォルダ です.Den8Wz4起動後,Den8Wz4でメールを閲覧すると逐次そのメール フォルダが追加されます. - {Enter}キーまたは左ダブルクリックで,選択メールフォルダの メールが開かれます.{Esc}でフォルダツリーを閉じます. - 電八のメールフォルダで選択したメールや,前述のDen8Wz4のメール 本文タブを,フォルダツリー内のフォルダへドラッグ&ドロップする ことで,メールの移動をすることができます.また,電八APIにCopy コマンドが実装されれば,Ctrlキーを押しながらドロップすることで メールのコピーをすることができるようになるはずです. - フォルダツリーとメール本文との境界線を左ダブルクリックすると フォルダツリーの幅が最小値になります(メインウィンドウの左枠が 少し太くなって見える).メインウィンドウの左枠(気持ち内側)を 再度左ダブルクリックすると,幅が元に戻ります. ○添付ファイル - エンコード形式は,BASE64,UUEncode,QuotedPrintableに対応して います.UUEncodeはMIME-Multipartだけでなく,メール本文中に 埋め込まれているものも無理やり別Partとして解釈します. - 添付ファイルが書庫ファイル(Lzh,Zip,tar,cab)の場合,書庫内 ファイルがリストビューで表示されます(MetaViewプラグインの anyarc.mpiと同様な機能です).書庫内ファイルを選択して開いたり, 展開して保存したり,直接他のWindowにドラッグ&ドロップして 展開することができます.なお,この機能を使用する場合は Unlha32.dll,Unzip32.dll,Tar32.dll,Cab32.dllが必要です. - 送信系フォルダのメールを表示しているときは,ウィンドウに ファイルをDrag&Dropすることで,そのメールにファイルを添付 することができます.このとき,添付の方法として[そのまま], [LZH圧縮],[ZIP圧縮]のいずれかを選択することができます. ○その他 - [Grep]は,現在表示しているメールフォルダを検索対象にして WZ Grepを起動します.起動したWZ Grepで,{Enter}を押すか 左ダブルクリックすると,対象ファイルはWZ EDITORではなく Den8Wz4で開かれます. - [電八と同期]を使うと,[次のメール][前のメール]等の機能が 電八で表示されているフォルダ上の表示順に従うようになります. 例えば,電八の方で題名順にソート表示してあれば,その順番 通りにメールを閲覧することができます. - [ペン猫OP1と同期]を使うと,現在表示されているメールの フォルダを対象にペン猫OP1が自動的に起動され,ペン猫OP1での 表示順(スレッド順)にメールを閲覧することができます. ■機能一覧 --------------------------------------------------------------------- [コマンド] [キー割当] [機能] Quit Q Den8Wz4を終了 Config {F1} 設定ダイアログ ConfigHeadersbar ヘッダバーのカスタマイズ ConfigToolbar ツールバーのカスタマイズ ConfigFldTree フォルダツリーのカスタマイズ ConfigKeybind キーカスタマイズ NextRoll J 1行ロールアップ (メール末尾は画面末尾に留まらせる) PrevRoll K 1行ロールダウン NextPage H 次のページ (メール末尾は画面末尾に留まらせる) PrevPage L 前のページ NextPageOrMail 次のページ/メール末尾が画面内に 表示されていたら次のメール PrevPageOrMail 前のページ/メール先頭が画面内に 表示されていたら前のメール NextPageOrUnreadMail {Space} 次のページ/メール末尾が画面内に 表示されていたら次の未読メール PrevPageOrUnreadMail +{Space} 前のページ/メール先頭が画面内に 表示されていたら前の未読メール NextMail N 次のメール PrevMail P 前のメール NextUnreadMail +N 次の未読メール PrevUnreadMail +P 前の未読メール ParentMail {BackSpace} 参照元メールを表示 BackMail +{BackSpace} 直前に表示していたメールに戻る OpenPOPFileLink X-POPFile-Linkヘッダの指すURLを開く JumpLastMail ^H ^{End} フォルダ末尾のメール JumpTopMail ^L ^{Home} フォルダ先頭のメール SearchUnreadMail U 未読メールを検索 ※各フォルダの末尾に連続している 未読のみを検索対象とする SearchUnreadMailAll +U 未読メールを全検索 ※各フォルダのすべてのメールを 検索対象とする Send S 現在のメールを電八で送信 AutoLoginNow 電八で自動ログイン実行 Receive I 電八でメール受信 NewMail M 電八で新規メール作成 Reply R 現在のメールに返信 ReplyAll 現在のメールに全員返信 Forward F 現在のメールを転送 MoveMail ^M 現在のメールを移動 DeleteMail {Delete} 現在のメールを削除 CopyMail C 現在のメールをコピー EditMail E 現在のメールを編集 OpenThisPart +{Enter} 現在のPartを展開して開く(実行) NextStatus ^{Right} 現在のメールを次のステータスへ PrevStatus ^{Left} 現在のメールを前のステータスへ SaveAttachedFiles ^U すべての添付ファイルをデフォルト 保存フォルダに保存 AttachFiles ^T メールにファイルを添付 AppendAddress ^R 現在のメールのFromアドレスを電八の 住所録(Alias)に追加 ChangeFolder ^{Tab} 表示するメールフォルダを変更 ※DENSHIN8.INIの[Folder]セクションに あるフォルダからメニューで選択する OpenFolder ^O メールフォルダを開く ※ファイルダイアログで*.FLDを選択する CloseFolder ^X 電八で現在のメールフォルダを閉じる NewFolder ^K 電八で新規フォルダ作成 Grep G WZ Grepを起動 ※現在のメールフォルダを検索対象に ViewHeader V Headerタブを表示(本文タブとトグル) NextPart {F3} 次のPartを表示 PrevPart {F2} 前のPartを表示 ToggleSyncDen8 電八と同期(トグル切替) ※以降のメール表示系コマンドを, 電八で表示されているフォルダの 表示順とする ToggleSyncPnekoOP1 T ペン猫OP1と同期(トグル切替) ※ペン猫OP1を起動し,以後のメール 表示系コマンドを,ペン猫OP1での 表示順とする ToggleSyncDen8 閲覧モード(未読メールを表示しても 電八側ステータスを既読に変更しない) (トグル切替) ToggleFontType +^P プロポーショナルフォントで表示 (トグル切替) ToggleFolderTree +{Esc} フォルダツリーを表示(トグル切替) ToggleHeadersbar {Enter} ヘッダバーを表示(トグル切替) ToggleToolbar ^ ツールバーを表示(トグル切替) ToggleStatusbar +^ ステータスバーを表示(トグル切替) ToggleHeightMax +%F Windowの高さを最大化←→元に戻す ■カスタマイズ --------------------------------------------------------------------- 基本設定をConfig,ヘッダバーに関する設定をConfigHeadersbar,ツール バーに関する設定をConfigToolbar,キーへの機能割当をConfigKeybind, フォルダツリーに関する設定をConfigFldTreeですることができます. [表示]メニューからもそれぞれ呼び出せます. ○基本設定の[HTML→TEXT変換コマンド]指定について ここにHTML→TEXT変換コマンドを指定すると,text/htmlのPartをその コマンドを使用してテキストに変換してから表示するようになります. コマンド指定中,入力ファイルを指定する位置に%in,出力ファイルを 指定する位置に%outを記述することができます. 例1) D:\Progra~1\HTOX\HTOX.EXE %in %out %inの拡張子を.txtにしたものが出力ファイル名になるコマンドの場合は %outの記述がなくてもかまいません. 例2) D:\Progra~1\HTOX\HTOX.EXE %in リダイレクト記号を使用する場合は,"cmd.exe /c"または"command.com /c" を先頭につける必要があります. 例3) cmd.exe /c D:\Progra~1\HTOX\HTOX.EXE %in > %out ■Den8Wz4.DLLについて --------------------------------------------------------------------- WZマクロだけでは実現できない(もしくは実現できそうにない)機能を DLLにしました.BASE64,UUEncode,QuotedPrintableのデコード処理関数, フォルダ選択ダイアログ表示用関数,ツールバーのBitmapリソース, DDEサーバ機能用関数,電八本体からの情報取得関数が含まれています. デコード処理関数は当初はWZマクロで記述していたのですが,あまり 考えず適当にコーディングしたためか非常に処理が遅く,添付ファイル 展開にストレスを感じたため,Cで組んでDLLにしてみました. フォルダ選択ダイアログ表示用関数は,WZマクロからはShellAPIの SHBrowseForFolder()を簡単には使えないため(どうにかすれば使える らしいですが),それを呼び出すだけのものです. ちなみにWZ APIにあるuiSelectFolder()は,I/Fが趣味に合わないので 使用しませんでした.(^^; DDEサーバ機能も,WZマクロのみではどうしてもうまくいかなかったので DDEの登録・CALLBACK・解除をDLL側でさせるようにしました. なお,Den8Wz4.DLLの作成にはBorland社のBorland C++ 5.5.1を使用 させていただきました. ■御礼 --------------------------------------------------------------------- 電信八号ビューワ ViewDEN8から,概観・機能・仕様・ソースコード・ ドキュメントの記述などを参考に(ところによっては拝借)させていただき ました.ViewDEN8を作成・改変されたy.mikomeさんとM.Ishidaさんに深く 感謝いたします. Multipartメールをタブ切り替えで表示する方式について,電極Z号化 計画のMetaviewプラグインを参考にさせていただきました.また,電八で 開いているフォルダウインドウに対応するメールファイルのフルパスの 取得方法について,電極Z号化計画プラグイン開発キットに含まれている den8hack.hを参考にさせていただきました.作者の山田智史さんに心から 感謝いたします. 書庫ファイルの閲覧機能について,Metaviewプラグインモジュールの anyarc.mpiを参考にさせていただきました.作者のゆれか!さんに 感謝の意を表します. WZマクロのStatic配列の仕様について清水川貴之さんとOrangeCatさんに, 文書設定の読み込み機能(txConfigRead)についてSquirrels 福井さんに, txpcodeRegisterCallbackの仕様についてM.Ishidaさんに,それぞれ ご教示を賜りました.諸氏に厚くお礼申し上げます. Ver1.60でOLEドラッグ&ドロップ対応するのに,http://www.nakka.com/で nakka(Tomoaki Nakashima)さんが公開なさっている「OLEのドラッグ& ドロップをCのみで行うソースとサンプル」を,ほとんどそのまま使用 させていただきました.これがなかったらOLEドラッグ&ドロップには 絶対対応できませんでした.ほんとうにどうもありがとうございます. 正規表現を使ってURL文字列を検索/抽出するのに,大崎博基さんの Perlメモ(http://www.din.or.jp/~ohzaki/perl.htm)を参考にさせて いただきました(ほとんどそのままという話も…).大崎博基さんに 心から謝意を表します. ■保証・配布 --------------------------------------------------------------------- このプログラムは無保証です.使用は本人の責任で行って下さい. 例えバグがあったり,このソフトの使用により損害が発生したとしても, 著作者はその修正の責任を持ちませんし,損害に対する責任も持ちません. 再配布は,アーカイブの内容を変更したりお金を取ったりしない限り 自由にしていただいて結構です.事前または事後に連絡をいただけると とても嬉しいです(非強制). 改造を加えたものを配布する場合は,オリジナルの著作表記を残し, 改造部分がわかるような方法を採ってください.なにか改良されたら 参考にさせていただきたいので,ソースを送付してもらえると大変 ありがたいです. ■連絡先 --------------------------------------------------------------------- バグ報告・要望・苦情・激励などは,E-mailで PATA まで,または以下のWebページの掲示板までお願いします. PATA's Laboratory 電八倶楽部メーリングリストも読んでいますので,そちらに投稿 いただいてもかまいません.(Village CenterのWeb掲示板は,閉鎖 されてしまいましたね…)