|
マクロ登録・コマンド置き換えダイアログボックス(Ver6.14対応版)
- コマンド置き換えについての説明
-
コマンド置き換えとは、秀丸メールのメニューバーやツールバーにならんでいるコマンドを、マクロに置き換えてしまう機能です。例えば「新規メール」コマンドを実行すると、普通はそのまま秀丸メールの新規メールコマンドを実行するのですが、ここの「コマンド置き換え」の指定をしておくと、新規メールコマンドを実行する代わりに指定されたマクロを実行することが出来ます。
マクロの方では、例えば「新規メール」の場合なら、マクロからNewMail関数呼び出しをするなどして実際の「新規メール」相当の処理をさせることが出来ます。
- 注意
-
コマンドの置き換えは、置き換えようとしてるコマンドの種類やマクロの内容によっては秀丸メールの動作がおかしくなる可能性があります。うまくいかない時は使わないでください。
コマンドの置き換えを指定していても、マクロの中からコマンドが呼び出して実行される場合には置き換えが効かず、本来のコマンドの処理が実行されます。例えばマクロの中からsendmessageを使ってWM_COMMANDを送った場合は本来のコマンドの処理が実行されます。
- コマンドとマクロの指定方法
-
コマンドとマクロの対応は、コマンドの番号とマクロファイル名をコンマで区切って指定する形になります。複数のコマンドを置き換えたい場合は改行で区切って複数行で指定します。
コマンドの番号は、「コマンドの番号を調べる...」ボタンから探すか、または
http://www.maruo.co.jp/software/bin/HmmMenuResource.txt
を参照ください。例えば「新規メール」は40001番、「返信メール」は「40019」となっています。
例えば返信メールコマンドをtest.macの実行に置き換えたい場合は、
40019,test.mac
のように指定してください。
- マクロの例
-
例えば返信メールコマンドで、もしも現在選択してるメールのFrom:ヘッダが特定の人なら「全員に返信」とする例は、以下のようになります。
loaddll "tkinfo.dll";
$from = dllfuncstr("CurrentHeader", "From");
$from = dllfuncstr("SetEmailOnly", $from);
$from = dllfuncstr("ToLower", $from);
if( $from == "maruo@mitene.or.jp" ) {
#n = dllfunc("MakeReplyCustom", "All", "", "");
} else {
#n = dllfunc("MakeReply");
}
マクロの中の処理として、tkinfo.dllの関数呼び出しじゃなくて、元々のコマンドをそのまま実行させたいことがあります。その場合は、
#n = sendmessage( hidemaruhandle(0), 0x111, コマンド番号, 0 );
のようにすればいいですが、場合によってはこれでうまくいかない可能性もあります。なぜかというと、sendmessageで実行される処理が「今現在マクロ実行中かどうか」を判断して実行内容を変えるような処理になってることがあるかもしれないからです。その辺は秀丸メールの作者も予想が難しいので、うまくいかない場合は利用しないようお願いします。
あと、補足としてですが、置き換えリストに入力出来る項目数自体には制限はありませんが、置き換えリストの文字列全体の長さについて、510バイト程度までの制限があります。あと、秀丸エディタのコマンドについては置き換え出来ません。秀丸メールのメニューに出てるコマンドで、コマンドコードが40000以上のコマンドに限って置き換え可能です。
- tkinfo.dllの関数について
-
「コマンド置き換え」の機能によってマクロが呼び出された場合、そのマクロからReasonMacroStarted関数を呼び出すと、11の値が返ってきます。
さらに、コマンド置き換えで起動されたマクロからGetTransmitCommandCode関数を呼び出すと、置き換えられたコマンドのコードが取得出来ます。
例:
loaddll "tkinfo.dll";
message "ReasonMacroStartedの値は " + str( dllfunc("ReasonMacroStarted" ) ) + " です。\n\n" +
"GetTransmitCommandCodeの値は " + str( dllfunc("GetTransmitCommandCode" ) ) + " です。";
|