秀丸メールで画面を閉じるだけの関数はなNo.09231
powerofdreams さん 20/07/15 22:26
 
お世話になります。

以下のようにやりたいことがうまくできず悩んでいます。

■やりたいこと
 1.現在のレジストリ値をバックアップ
 2.レジストリ値を書き換え
 3.メールを作成
 4.メールを保存し、作成画面(エディタ)を閉じる ★ここがポイント★
 5.レジストリ値をリストアする

■実現できないで悩んでいること
 1.4のメール作成画面(エディタ)を閉じるを実行するとマクロが終了してしま
うので、
   5が実行できない。

 2.4と5を入れ替えると、以下のエラーが発生するので不可。
   「エディタ上で実行できないTKInfo.dll呼び出しが行われました」

 3.EnvChangedを実行しなければ、レジストリは書き換わり一見問題なさそうだが、
   秀丸メール側の設定を見ると反映がされていないのでNG。

■考察
 exit関数のマクロが終了しない版がないかと探してみたのですが、見つからず。

 散々悩んで思いついたのは、下記マクロ実行後に再度別マクロを呼び出して、
 レジストリ書き込み、反映(EnvChanged)を実行させる方法です。

 他にいい案があるよ。などありましたら、アドバイスいただければ幸いです。
 よろしくお願いいたします。



■マクロ
loaddll "TKInfo.dll";

//1.現在のレジストリ値をバックアップ
openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config\\Edit";
#Before = getregnum("Indent");

//2.レジストリ値を書き換え
writeregnum "Indent", 0;
closereg;
#n = dllfunc("EnvChanged");


//3.メールを作成
#n = dllfunc("MakeReplyCustom", "Single", "");
$s = dllfuncstr("NewEditorMacro");

//なにか処理する//

//4.メールを保存し作成画面(エディタ)を閉じる
#n = dllfunc("SaveDraft");
if(#n != 0) {
 exit; ★実行すると以降が実行されない
}

//5.レジストリ値をリストアする
openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config\\Edit";
writeregnum "Indent", #Before;
closereg;
#n = dllfunc("EnvChanged"); 


[ ]
RE:09231 秀丸メールで画面を閉じるだけのNo.09232
秀まるお2 さん 20/07/16 10:35
 
>  1.4のメール作成画面(エディタ)を閉じるを実行するとマクロが終了してし
>まうので、
>    5が実行できない。

 SendLater関数呼び出しした後に、秀丸メール本体ウィンドウをアクティブにして、
エディタウィンドウはclosehidemaruforcedで閉じる作戦でいけると思います。

    #n = dllfunc("SendLater");
    #handle = hidemaruhandle(0);
    #n = dllfunc("SetMainWndTop");
    closehidemaruforced #handle;

>  2.4と5を入れ替えると、以下のエラーが発生するので不可。
>    「エディタ上で実行できないTKInfo.dll呼び出しが行われました」
>
>  3.EnvChangedを実行しなければ、レジストリは書き換わり一見問題なさそうだ
>が、
>    秀丸メール側の設定を見ると反映がされていないのでNG。

 秀丸メール本体ウィンドウ上でEnvChanged呼び出しすれば大丈夫だと思います。

[ ]
RE:09232 秀丸メールで画面を閉じるだけのNo.09233
powerofdreams さん 20/07/16 13:51
 
秀まるお2様
いつもありがとうございます。

エディタ上全てでどうこうするのではなく、本体側も使え。ということですね。

なるほど、、、
このような柔軟な発想が思いつきませんでした。
頭の柔らかさが大事ですね。

事実、ご提示いただいたソースで期待どおりの動作ができました。

アドバイス、ありがとうございました。

[ ]