アクティブにせずにマクロ実行No.08129
SBNB さん 04/05/23 18:26
 
受信時起動のマクロの中でテキストファイルを扱っています。他のソフトを使用中に
制御を取られて困っています。

メインウインドウ起動のマクロで、エディタウインドにてテキストを扱ってまたメイ
ンに戻って処理を続行させる場合、ウインドウをアクティブにせずにマクロの実行だ
けを別なウインドウで継続させたいのですが、何か方法がありますか? 全てのソフト
の最前面に持ってくるのではなくて、せめて鶴亀の中だけで前面に移動するとかにな
ればありがたいです。(勝手に何かが背後で動くと言うのはセキュリティ上だめかと
言う気もしますけど)

コマンドラインの /x ではアクティブにせずと言うのはできないようです。

---
また、runsyncとrunsync2は、どうも待機してくれないようです。(この後のメッ
セージ分が先に処理されます。)また、runsync2のネストはエラーを返さずに失敗す
るようです。(runsyncについては確認していません)

---
それともう1つ、ツールバーに登録したマクロボタンから、次のマクロを実行すると、
run "turukame.exe  newmail macro=TK_test2.mac";
「他の鶴亀ウインドウがマクロを終了するまで待っています。」と言うメッセージが
出て、そのままタイムアウトまで待つと、本体ウインドウとエディタウインドがフ
リーズ状態になります。これは、呼んでいるマクロが悪いのでしょうか。

[ ]
RE:08129 アクティブにせずにマクロ実行No.08132
秀まるお さん 04/05/23 22:04
 
 エディタ・ウィンドウをマクロから起動してアクティブ化しないように、とい
うのは、技術的には可能だと思います。では、近々その辺の調査および可能であ
れば対応するということにさせていただきます。

 コマンドラインの/xを使ったマクロ起動などをマクロから行うのは、出来ない
のが仕様です。そもそも、現状の鶴亀メールでは、マクロ実行中にマクロを多重
実行することは出来ません。

 フリーズするのはバグですけど、とりあえずそういう使い方が出来ないことを
前提に対策をしていただく必要があります。

[ ]
RE:08132 アクティブにせずにマクロ実行No.08133
SBNB さん 04/05/23 22:24
 
> エディタ・ウィンドウをマクロから起動してアクティブ化
>しないように、というのは、技術的には可能だと思います。

これを回避するのに色々とあがいた結果がその他の話でしたので、これができると非
常にありがたいです。ご無理の場合は仕方が無いですが可能になったら非常にうれし
いです。

> コマンドラインの/xを使ったマクロ起動などをマクロから行うのは、出来ないの
>が仕様です。

そうでしたか。ヘルプにコマンドラインで newmail の記述があったので /x のほう
も同様に表に出さずにできるのかと勝手に期待していました。


ほかに何か方法が無いか考えてみます。

[ ]
RE:08133 アクティブにせずにマクロ実行No.08135
秀まるお さん 04/05/24 10:22
 
 newmailしてからマクロ実行するんじゃなくて、何かうまく工夫してnewmailコ
マンドを実行する前にメール内容をうまく作成して、それをコマンドラインの
sendlaterなりsendnowquietしてやる作戦がいいんじゃないかと思います。

 どっちしても、エディタ起動を、ウィンドウをアクティブにせすに実行する方
法は考えてみます。

[ ]
RE:08135 アクティブにせずにマクロ実行No.08136
秀まるお さん 04/05/24 13:57
 
 SetQuietModeという関数を追加しまして、一応対応します。ただし、少し制限
があります。

 QuietModeにした状態でNewMailなどのウィンドウ生成関数を呼ぶと、そのウィ
ンドウはウィンドウの重なり順が一番下になります。setactivehidemaruや
SetMainWndTopを呼んだ場合も、そのウィンドウが一番下に行きます。

 hidemaruhandle(0)は正しい値を返しますが、hidemaruhandle(1)などの0以外
のパラメータを指定した場合はうまく動作しません。

例:
   #n = dllfunc("SetQuietMode" 1);
   #n = dllfunc("NewMail");
   #n = dllfunc("SetQuietMode" 0);

 そういうことでとりあえず次のバージョンに入れます。

[ ]
RE:08136 アクティブにせずにマクロ実行No.08138
SBNB さん 04/05/24 23:48
 
試行錯誤してみまして、SetQuietMode を何とか使いこなせるようになりました。大
変助かります。ありがとうございました。

ヘルプには記述は無いようでしたが、SetQuietMode は1回使うと解除されてしまう気
がしました。

#n = dllfunc("SetQuietMode", 1);
#n = dllfunc("NewMail");
save;
#h=hidemaruhandle(0);
 
#n = dllfunc("SetQuietMode", 1);
#n=dllfunc("SetMainWndTop");
closehidemaru(#h);

ここで、SetMainWndTop の直前にも必要みたいです。それとも、SetQuietMode を使
ったら、次の命令を SetQuietMode 0 とでサンドイッチにしなければなりませんか?

SetQuietMode,1
while(){
newmail;
}
SetQuietMode,0
のようにループの前後でやろうとしたらだめみたいです。一応回避策は分かりました
ので、要望としては十分です。このテスト結果を基にしてマクロを書き直してみます。
ありがとうございました。

#それから、SetQuietModeを使う方がいたら、ヘルプからコピーしてください。

[ ]
RE:08138 アクティブにせずにマクロ実行No.08139
秀まるお さん 04/05/25 09:48
 
 これはこれは大変失礼しました。

 SetQuietModeを1にセットしなおさないとうまく動作しないのは、バグです。
マクロ終了時に自動で0にリセットされるような処理を入れたら、それのせいで
おかしくなってしまいました。

 とりあえず、NewMailなりSetMainWndTopなどを実行する直前に毎回1にセット
しなおす作戦で回避お願いします。

 次のバージョンで、毎回1にセットしなおさなくてもいいように直します。

[ ]