常駐鶴亀でのマクロ後に鶴亀本体にフォーNo.11120
capa さん 04/10/23 11:42
 
capa です。

新着メールのポップアップに鶴亀本体の機能ではなく、Iranoanさん作の
ちょっと便利なマクロ集にあるmailpopup.macを使用しています。

常駐鶴亀のみの状態で他ウィンドウで文字入力している最中にポップア
ップが表示され、たまたまNを入力してしまいウィンドウが閉じることが
あるのですが、この時点でフォーカスは元のウィンドウに戻らず表示さ
れていない鶴亀本体に移ったような状態になってしまいます。

何らかのメッセージボックスを表示するようなマクロが常駐鶴亀のみの
場合から実行されると、必ずこの状態になるようです。

その結果、鶴亀本体が表示されていないにもかかわらず本体のキー割り
当てが有効になってしまい、Enterキーを押せば(本体終了前に一覧で
メール選択中であれば)メール表示画面がいきなり表示されたりします。
これだけなら実害はないのですが、私の場合、メール削除を「D」に割り
当てているため、たまたま他ウィンドウでの「send」等のNDが続く文字
入力とポップアップ通知のタイミングが重なり、知らず知らずのうちに
メールを紛失してしまったケースもありました。

何とか回避する手段はないものでしょうか
--
TuruKame 3.70 (Win2000 Pro SP4)

[ ]
RE:11120 常駐鶴亀でのマクロ後に鶴亀本体No.11121
Iranoan さん 04/10/23 12:03
 
 capa さん今日は、Iranoan です。
> 新着メールのポップアップに鶴亀本体の機能ではなく、Iranoanさん作の
> ちょっと便利なマクロ集にあるmailpopup.macを使用しています。
 ご利用有り難うございます。
> 常駐鶴亀のみの状態で他ウィンドウで文字入力している最中にポップア
> ップが表示され、たまたまNを入力してしまいウィンドウが閉じることが
> あるのですが、この時点でフォーカスは元のウィンドウに戻らず表示さ
> れていない鶴亀本体に移ったような状態になってしまいます。
<snip>
> 何とか回避する手段はないものでしょうか
 マクロで、鶴亀以外のどれがアクティブか知る方法がないので、マクロの改
造で対処するのは無理です。
 ##sendmessage でアクティブ・ウィンドウの設定は可能かもしれませんが...。

 私は何か集中したい作業があるときは、メッセージが表示されるのも嫌なの
で、鶴亀本体のウィンドウを起動しつつ最背面におくことにしています。

[ ]
RE:11121 常駐鶴亀でのマクロ後に鶴亀本体No.11123
秀まるお さん 04/10/25 14:16
 
 鶴亀本体が表に出てるかどうかは、

  #fore = dllfunc("Bypass_GetForegroundWindow");
  #my = dllfunc("MainWnd");
  if( #fore == #my ) {
      message "鶴亀本体が表に出てる";
  } else {
      message "他のソフトが表に出てる";
  }

 みたいなやり方で判定できます。

 他のソフトが表に出てる時は、Bypass_MessageBox関数を使うか、または
ShowNotifyWndを使うといいかもしれないです。特にShowNotifyWnd関数は、他の
ソフトが表に出てくる時、それのインプットフォーカスを取ることなく出るよう
に作ってあります。

[ ]
RE:11123 常駐鶴亀でのマクロ後に鶴亀本体No.11126
秀まるお さん 04/10/25 17:21
 
>  他のソフトが表に出てる時は、Bypass_MessageBox関数を使うか

 BypassMessageBoxの第1パラメータ(handle of owner window)にNULLを渡せ
ば、メッセージボックスをOKした直後に鶴亀本体にフォーカスが乗ることは無く
なります。

[ ]
RE:11126 常駐鶴亀でのマクロ後に鶴亀本体No.11127
Iranoan さん 04/10/25 17:57
 
 秀まるおさん、capa さん今日は、Iranoan です。
>  BypassMessageBoxの第1パラメータ(handle of owner window)にNULLを渡せ
> ば、メッセージボックスをOKした直後に鶴亀本体にフォーカスが乗ることは無く
> なります。
 この辺りを参考に、マクロを修正してみます。

 以下 capa さんへ
 手元でさっと確認した限りでは、49 行明付近の
>     if( dllfunc("Bypass_MessageBox",hidemaruhandle(0),"メールが届いて
>     います。メールを読みますか?\n直前に受信したメール=" + str(##
>     return) + " / 本体を終了後に届いた全未読メール=" + str(##all),"鶴
>     亀メール",0x1024) == 7){
(本当は一行) を
>     if( dllfunc("Bypass_MessageBox", 0,"メールが届いています。メールを
>     読みますか?\n直前に受信したメール=" + str(##return) + " / 本体を終
>     了後に届いた全未読メール=" + str(##all),"鶴亀メール",0x1024) == 7){
とする、つまり hidemaruhandle(0) → 0 に書き変えて頂くだけで、ご希望の
動作になると思います。

[ ]
RE:11127 常駐鶴亀でのマクロ後に鶴亀本体No.11129
capa さん 04/10/25 20:24
 
capa です。

>とする、つまり hidemaruhandle(0) → 0 に書き変えて頂くだけで、ご希望の
>動作になると思います。

この変更で希望通りの動作となりました。Iranoanさんの投稿の前に、該
当部分を null や "NULL" などに変えてみて「うまくいかんなぁ〜」と
悩んでいたのは恥ずかしいので内緒です(^^;;

直前に最前面だったウィンドウを取得しようがないので、マクロ側では
どうしようもないことだと思って5番ではなくこちらのフォーラムに質
問しましたが、こういった解決法があったのですね。目からウロコです。

秀まるおさん、Iranoanさん、ありがとうございました。

[ ]