|
いつもお世話になっております。
永遠とメール保存マクロを作成しております。
このうち、やはり、SAVEASで開くフォルダが動作不安定です。
原因として、どのようなものが、考えられるでしょうか。
動作確認用マクロは以下のようなものです。
//※ 本マクロは動作確認用で、E:\tmpフォルダにディレクトリを作成します。
//デバッグ時は、以下の2行のコメントを外すこと
debuginfo 1; //デバッグ出力許可
#debug = 1; //デバッグフラグ
call sub_tkinfo;
call Dserver;
$NameDay = "Fw: 【ABC】?重要/ホームページの仕様変更";
$strDir = " E:\\tmp";
//フォルダ名の修正 空白は「無」に置き換えるなど
// 使えない文字 \ / : * ? " < > |
call ChangeCharacter $NameDay," ","";
$NameDay2 = $$return;//戻り値受領
call ChangeCharacter $NameDay," ","";
$NameDay2 = $$return;//戻り値受領
call ChangeCharacter $NameDay2,"\"","";
$NameDay2 = $$return;//戻り値受領
call ChangeCharacter $NameDay2,":","-";
$NameDay2 = $$return;//戻り値受領
call ChangeCharacter $NameDay2,";","-";
$NameDay2 = $$return;//戻り値受領
call ChangeCharacter $NameDay2,"/","-";
$NameDay2 = $$return;//戻り値受領
call ChangeCharacter $NameDay2,"?","";
$NameDay2 = $$return;//戻り値受領
call ChangeCharacter $NameDay2,"<","(";
$NameDay2 = $$return;//戻り値受領
call ChangeCharacter $NameDay2,">",")";
$NameDay2 = $$return;//戻り値受領
call ChangeCharacter $NameDay2,"|","-";
$NameDay2 = $$return;//戻り値受領
call DBOUT "$NameDay2 = " + $NameDay2 +" \n";
// セーブするか否かの確認
question "保存処理しますか? " + "\x0a" + "\x0a" + $strDir + "\x0a" + "
\x0a" + $NameDay2;
if( result != yes ) goto LEND;
//カレントディレクトリセット
ddeexecute "setcurdir " + $strDir;
//フォルダ作成
ddeexecute "mkdir /n " + $NameDay2;
//フォルダ作成に成功したか否か
//・処理の結果コード(result)
// 0: 成功
// 1: 失敗
##r1 = val(dderequest("fileopresult"));
if( ##r1==0 ){
//ディレクトリを書き換え
writeregstr "ExpDir", $strDir + "\\" + $NameDay2;
message "フォルダ作成しました。"+ "\x0a" + "\x0a" + "$strDir : " +$s
trDir + "\x0a" +"\x0a"+ "$NameDay2 : " + $NameDay2;
}else{
//ディレクトリを書き換え
writeregstr "ExpDir", $strDir;
message "フォルダ作成に失敗しています。"+ "\x0a" + $strDir + " をレ
ジストリに登録しました";
}
//カレントディレクトリ問合せ
$cdir = dderequest("getcurdir");
if( strlen($cdir) > 0 ) message "カレントディレクトリ = " + $cdir;
//レジストリを閉じて
closereg;
//秀丸に読み込ませる
#n = dllfunc("EnvChanged", 1);
//クリックボードにフォルダ名を保存
beginclipboardread;
setclipboard $NameDay2;
call Time_wait 1000;
//名前を付けて保存(秀丸エディタマクロ)
SAVEAS;
//キャンセルした場合は、終了
if(result==false)goto LEND;
//**************************************************************************
***********
ChangeCharacter://buffer 中の文字列を置換
//$$1:buffer
//$$2:検索文字列
//$$3:置換文字列
##change_char=strlen($$2);
$$string = "";
while(1){
##number = strstr($$1, $$2);
if(##number == -1)break;
else{
##long = strlen($$1);
$$string = $$string + leftstr($$1, ##number) + $$3;
$$1 = rightstr($$1, ##long - ##number - ##change_char);
}
}
return $$string + $$1;
//**************************************************************************
***********
//**************************************************************************
***********
Time_wait://ウエイト
#tick = tickcount;
while( tickcount - #tick < val($$1) ) {
//
}
return;
//**************************************************************************
***********
//**************************************************************************
***********
DBOUT:
if(#debug == 1 && findwindowclass("DBConClass") != 0) debuginfo $$1 + "\n";
return;
LEND:
freedll;
endmacro;
//**************************************************************************
***********
//**************************************************************************
***********
Dserver:
//田楽DLLをload
call Dengaku;
//$apppath = input("田楽サーバのあるフォルダを入力して下さい。",hide
marudir);
$apppath = hidemarudir;
//message $apppath;
if( (!result) || $apppath == "" ) endmacro;
if( rightstr($apppath,1) != "\\" ) $apppath = $apppath + "\\";
if( !existfile($apppath+"dgserver.exe") ){
message "指定されたフォルダに dgserver.exe がありません。";
endmacro;
}
//田楽サーバのダイアログ機能使用部−−−−−−−−−−−−−−−−
// 田楽サーバの実行
run $apppath + "dgserver.exe";
if( !result ){
message "田楽サーバの起動に失敗しました。";
goto LEND;
}
ddeinitiate "DengakuServer", "AllService";
if( !result ){
#hwnddg = findwindowclass("DengakuServerClass");
if( #hwnddg == 0 ) {
run $apppath + "dgserver.exe";
}
call Time_wait 500;
ddeinitiate "DengakuServer", "AllService";
if( !result ){
message "やっぱりエラーです";
endmacro;
}
}
return;
//**************************************************************************
***********
Dengaku:
// 田楽DLLのロード
if(existfile(hidemarudir+"\\DengakuDLL.dll")){
// loaddll hidemarudir+"\\DengakuDLL.dll";
loaddll "tkinfo.dll";
$$filename =hidemarudir+"\\DengakuDLL.dll";
#dll = dllfunc("LoadDll",$$filename );
if( #dll == 0 ) {
message "dllがロードできませんでした。";
goto LEND ;
}
}
else {
$$mes = "田楽DLLが見つかりませんでした。\n" +
"田楽DLLを秀丸エディタインストールディレクトリにおいてく
ださい。\n" +
" 秀丸エディタインストールディレクトリ:\n\t"+hidemarudi
r + "\n\n" +
"田楽DLL ダウンロードURL\n"+
" http://www.ceres.dti.ne.jp/~sugiura/hidemaru/macros/dgserver/
\n" +
$info ;
message $$mes ;
goto LEND ;
}
if (!result) {
message "田楽DLL をロードできませんでした。"+$info;
goto LEND ;
}
return;
//**************************************************************************
***********
//**************************************************************************
***********
sub_tkinfo:
loaddll "tkinfo.dll";
if( !result ) {
message "このマクロは秀丸メールで実行してください。";
endmacro;
}
if( !dllfunc("IsTuruKameMain") ) {
message "このマクロは秀丸メール本体側で実行してください。";
endmacro;
}
return;
動作環境
秀丸メール Ver.5.34 V8
秀丸エディタ Ver.8.00 V44
OS XP SP3
|
|