ShowNotifyWnd関数 ダイアログボックス表No.01890
プックン さん 09/01/29 21:12
 
秀まるおさん、こんばんは。
プックンです。

ShowNotifyWnd関数の使用方法について確認させてください。
ShowNotifyWndを使用してメッセージを表示してマクロを継続したい処理を
実施するときに、どうもエラーが発生してうまくかうことができません。
発生する条件がよくわかっていなかったので、使いたいけど調べる環境と時間と元気が
なかなかなかったのですが、やっと調べる環境と元気と時間ができたのでトライアル
してみました。
トライアルしたものの原因がよくわかりませんでした。
ShowNotifyWnd関数を使用するときに
 "ダイアログボックス表示中なので処理できません。"
というのが発生しないようにする上で注意事項とかあるのでしょうか?。

//トライアルマクロ 1--------------
    loaddll "TKInfo.dll";
    #n = dllfunc("ShowNotifyWnd", "新着の通知", "特殊な新着メールがあります。
");
    $$root_account = dllfuncstr("ExecAtMain", "CurrentAccount") ;
    #n = dllfunc( "SelectFolder", "", "受信" );
    message "pu" ;

    freedll;
    endmacro;
//トライアルマクロ 1終り--------------

トライアルマクロ 1
    エラー
    TKINFO.DL:ダイアログボックス表示中なので処理できません。
    関数コード = 160

    TKINFO.DL:ダイアログボックス表示中なので処理できません。
    関数コード = 8

//トライアルマクロ 2--------------
    loaddll "TKInfo.dll";
    #n = dllfunc("ShowNotifyWnd", "新着の通知", "特殊な新着メールがあります。
");
    $$root_account = dllfuncstr("ExecAtMain", "CurrentAccount") ;
    #n = dllfunc( "SelectFolder", "", "受信" );
    message "pu" ;

    freedll;
    endmacro;
//トライアルマクロ 2終り--------------

Error未発生

//トライアルマクロ 3--------------
    loaddll "TKInfo.dll";
    #n = dllfunc("HideNotifyWnd");
    #n = dllfunc("ShowNotifyWnd", "新着の通知", "特殊な新着メールがあります。
");
   
    $$root_account = dllfuncstr("ExecAtMain", "CurrentAccount") ;
    #n = dllfunc( "SelectFolder", "", "受信" );
    message "pu" ;
   
    freedll;
    endmacro;
//トライアルマクロ 3終り--------------

トライアルマクロ 3
    エラー
    TKINFO.DL:ダイアログボックス表示中なので処理できません。
    関数コード = 160

    TKINFO.DL:ダイアログボックス表示中なので処理できません。
    関数コード = 8


[ ]
RE:01890 ShowNotifyWnd関数 ダイアログボNo.01891
プックン さん 09/01/29 21:17
 
動作環境を記述するのを忘れていました。

OS: Windows XP Home Edition Version 2002 Service Pack 3
HidemaruMail: Version 5.14

[ ]
RE:01891 ShowNotifyWnd関数 ダイアログボNo.01892
秀まるお さん 09/01/30 09:58
 
 「ダイアログボックス表示中なので処理できません」のエラーが出るのは、マ
クロの中身のせいじゃなくて、通知ウィンドウの出方によるのだと思います。

 通知ウィンドウのオーナーウィンドウを出す時に、その通知ウィンドウのオー
ナーウィンドウを何にするかが2通りありまして、具体的には、

 「秀丸メール本体が非表示の時、または秀丸メール本体ウィンドウがアクティ
ブの時」

 は、通知ウィンドウのオーナーが秀丸メール本体となります。その他の場合、
つまり、秀丸メール本体が画面上に出ているけども他のアプリケーションソフト
がアクティブになってる時は、オーナーが「NULL」になります。

 オーナーが秀丸メール本体になってしまうとTKINFO.DLL呼び出しでエラーにな
ってしまうようです。

 ということで、これはこれで直すべき問題だと思います。なんとか次のβ版で
は直したいと思います。

 今のところなんとか対処するとしたらですが…。ShowNotifyWndを呼んでしま
うとTKINFO.DLLは使えない物と思っていただくしか無い訳なので、しいてなんと
かするとしたら、Gertrudさん作のToastNotifyを使うとかしか無いかもしれませ
ん。

[ ]
RE:01892 ShowNotifyWnd関数 ダイアログボNo.01897
プックン さん 09/01/30 19:34
 
秀まるお様、回答ありがとうございます。

> ということで、これはこれで直すべき問題だと思います。なんとか次のβ版で
>は直したいと思います。

急ぎませんので、次のβ版で対応していたけると助かります。
よろしくお願いいたします。

[ ]
RE:01892 ShowNotifyWnd関数 ダイアログボNo.01925
プックン さん 09/03/04 23:29
 
秀まるお様、こんばんは。

β版での改変内容
>2009/03/04 V5.16β3
>バグ修正
>ShowNotifyWndで通知ウィンドウが出ている最中にtkinfo.dll
>を呼び出すと「ダイアログボックス表示中なので」のエラー
>になってしまうバグ修正。

試してみたのですが、まだエラーがでるようです。
エラーがでてそうな前後に"message文"をいれてみたら、エラーが
出ませんでした。
私の環境に何か不具合があって発生しているのでしょうか?。

//トライアルマクロ 1--------------
    ##i = 0 ;
    loaddll "TKInfo.dll";
    message "step" + str(##i) ; ##i = ##i + 1;
    #n = dllfunc("ShowNotifyWnd","新着の通知", "トライアル1");
    message "step" + str(##i) ; ##i = ##i + 1;
    $$root_account = dllfuncstr("ExecAtMain", "CurrentAccount") ;
    message "step" + str(##i) ; ##i = ##i + 1;
    #n = dllfunc( "SelectFolder", "", "受信" );
    message "step" + str(##i) ; ##i = ##i + 1;
    freedll;
    endmacro;
//トライアルマクロ 1終り--------------

    ・Error未発生

//トライアルマクロ 2--------------
    ##i = 0 ;
    loaddll "TKInfo.dll";
    #n = dllfunc("ShowNotifyWnd","新着の通知", "トライアル2");
    message "\"ExecAtMain\", \"CurrentAccount\" pre" ;
    $$root_account = dllfuncstr("ExecAtMain", "CurrentAccount") ;
    message "\"ExecAtMain\", \"CurrentAccount\" post" ;
    #n = dllfunc( "SelectFolder", "", "受信" );
    freedll;
    endmacro;
//トライアルマクロ 2終り--------------

    ・Error未発生

//トライアルマクロ 3--------------
    ##i = 0 ;
    loaddll "TKInfo.dll";
    #n = dllfunc("ShowNotifyWnd","新着の通知", "トライアル3");
    $$root_account = dllfuncstr("ExecAtMain", "CurrentAccount") ;
    #n = dllfunc("ExecAtMain", "SelectFolder", "", "受信" );
    freedll;
    endmacro;
//トライアルマクロ 3終り--------------

    ・Error発生
    TKINFO.DL:ダイアログボックス表示中なので処理できません。
    関数コード = 8

//トライアルマクロ 4--------------
    ##i = 0 ;
    loaddll "TKInfo.dll";
    #n = dllfunc("ShowNotifyWnd","新着の通知", "トライアル4");
    $$root_account = dllfuncstr("CurrentAccount") ;
    #n = dllfunc("SelectFolder", "", "受信" );
    freedll;
    endmacro;
//トライアルマクロ 4終り--------------

    ・Error発生
    TKINFO.DL:ダイアログボックス表示中なので処理できません。
    関数コード = 8


動作環境
OS:Windows XP Home
秀丸メール:Ver5.16Beta3

[ ]
RE:01925 ShowNotifyWnd関数 ダイアログボNo.01926
秀まるお さん 09/03/05 13:01
 
 すみません。僕の所でもダメでした。

 一応、ちゃんと対応したつもりだったんですが、抜けがありました。
SelectFolder関数とかだとダメでした。

 ということでまた修正させていただきます。

[ ]
RE:01926 ShowNotifyWnd関数 ダイアログボNo.01939
プックン さん 09/03/06 01:12
 
秀まるお様、こんばんは。
Ver5.16 Beta4で確認してみました。
期待通りの動作になりました。秀まるお様、対応ありがとうございます。

[ ]
RE:01939 ShowNotifyWnd関数 ダイアログボNo.01954
プックン さん 09/03/07 02:03
 
秀まるお様、こんばんは。
ShowNotifyWndで1点確認させてください。
この関数は、秀丸メールエディタ上では実行できない関数なのでしょうか?。Helpに
は特に記載がなかったのですが、下記マクロをエディタ上で実行するとエラーがでま
した。

お試しマクロ
 loaddll "TKInfo.dll";
 ##n = dllfunc("ShowNotifyWnd", "新着の通知", "特殊な新着メールがあります。");
 freedll;
 endmacro;

とりあえず、回避策で"ExecAtMain"をいれて現在は使用中です。

TKINFO.DLL:エディタ上で実行できないTKInfo.dll呼び出しが行われました。
関数コード = 135

[ ]
RE:01954 ShowNotifyWnd関数 ダイアログボNo.01963
秀まるお さん 09/03/09 14:10
 
 ShowNotifyWnd関数は、たしかに秀丸メール本体ウィンドウ上でないと実行出
来ないです。

 ヘルプの方を直します。

[ ]
RE:01963 ShowNotifyWnd関数 ダイアログボNo.01971
プックン さん 09/03/09 22:37
 
> ShowNotifyWnd関数は、たしかに秀丸メール本体ウィンドウ上でないと実行出
>来ないです。

了解しました。
回答ありがとうございました。

>
> ヘルプの方を直します。
よろしくお願いいたします。

[ ]
RE:01971 ShowNotifyWnd関数 ダイアログボNo.01994
プックン さん 09/03/11 22:50
 
秀まるお様、こんばんは。
ShowNotifyWnd関数の動作について確認させてください。
>メッセージを出したままマクロの実行も継続させたい時に便利です
とマクロヘルプに記載されています。
この説明どおり、ShowNotifyWndの後にマクロの実行が継続しているのは
確認しました。

しかし、
私がマクロの動作と秀丸メールの動作として下記のように考えていました。
マクロの仕様としては、私が確認した"秀丸メールの動作"が正しいのでしょうか?。

設定
    下記"debug.mac"をマクロ登録 - 設定の一覧(L) - 自動起動
    "受信が一段落した時(V)"にdebug.macを登録する。
    定期受信を実施するために
    設定(O) - 全般的な設定(E) - 設定の一覧(L) - 定期受信
    "定期的に受信する(B)"をチェックして、対象のアカウントに
    チェックを入れる。
考えていた動作
    受信されたときに、debug.macが実行されるので定期受信を
    実施した時刻がマクロ実行毎に増えて時刻表示がされる。
    受信間隔は、定期受信が指定した間隔の時間で動作する。

秀丸メールの動作
    最初に受信したときにShowNotifyWnd関数によって時刻が
    表示される。
    (1)定期受信が指定した間隔の時間で受信されず、秀丸メール本体
    (2)ShowNotifyWndで表示したメッセージの"OK"
    (3)ShowNotifyWndで表示したメッセージの"キャンセル"
    (1) or (2) or (3)を押すまで、最初に表示されたShowNotifyWndの
    メッセージが表示されたまま。


//debug.mac
    loaddll "TKInfo.dll";

    //ShowNotifyWnd関数(TkInfo.dll)
    //メールを受信した後に「n通受信しました」を表示する用の
    //メッセージボックスを表示します。表示内容には任意の
    //この関数は秀丸メール本体側でのみ実行可能です。
    $$time = time ;
    ##n = dllfunc("ExecAtMain", "ShowNotifyWnd", "Debug",
        $$time);

LEND:
    freedll;
    endmacro;
//debug.mac end

確認2.
    下記"ShowNotify.mac"を自動起動 - 受信が一段落した時
    に登録。
    実際の動作
        debug.macで表示したShowNotifyWndのメッセージと
        2.macで表示したメッセージが表示される。
    ShowNotifyWndのメッセージが表示されていてもマクロが
    継続されていることが確認できる。

    //ShowNotify.mac
    execmacro currentmacrodirectory + "\\debug.mac" ;
    execmacro currentmacrodirectory + "\\2.mac" ;
    //ShowNotify.mac 終わり
    //2.mac
    message "debug:2.mac" ;
    //2.mac 終わり

動作確認環境
OS:Windows XP Home
秀丸メール:Ver5.16 Beta6

[ ]
RE:01994 ShowNotifyWnd関数 ダイアログボNo.01996
秀まるお さん 09/03/12 09:50
 
 ShowNotifyWndで表示した通知のウィンドウは、秀丸メール本体がアクティブ
になると勝手に消えます。なので、message文で出てきたメッセージボックスの
OKボタンを押したタイミングで通知ウィンドウは消えます。

 これはこれで仕様になります。

 それと、定期受信で自動起動されるマクロでmessage文を使ってしまうと、そ
のメッセージボックスが出てる間はマクロがずっと実行中ということになるので、
定期受信は止まってしまいます。それもまた仕様ってことになります。

 message文を使わないでおけば、少なくともユーザーさんが画面を操作しない
限り通知ウィンドウは出っぱなしになると思います。(確認はしてないけど)

[ ]
RE:01996 ShowNotifyWnd関数 ダイアログボNo.01998
Iranoan さん 09/03/12 11:27
 
 秀まるおさん今日は、Iranoan です。
 このスレッドを読んで気になったことがあるので、2 点確認させてください。

>  ShowNotifyWndで表示した通知のウィンドウは、秀丸メール本体がアクティブ
> になると勝手に消えます。なので、message文で出てきたメッセージボックスの
> OKボタンを押したタイミングで通知ウィンドウは消えます。
 先ずこちらについてですが、[Alt]+[Tab] で切り替えた時は閉じません。こ
れは仕様?

 次にヘルプの
> ShowNotifyWndで通知ウィンドウを表示し、そこの「OK/キャンセル」ボタンを
> 押してウィンドウ閉じた時に、「マクロ・マクロ登録・自動実行」の「受信が
> 一段落した時」に指定したマクロが実行されます。(V2.36からそうなった)
はどういうことでしょう? この通りだと、ShowNotifyWnd() 関数を使っている
マクロ (以下 ShowNotifyWnd.mac) を、「マクロ・マクロ登録・自動実行」の
「受信が一段落した時」に指定すると、無限ループになる気がします。具体的
には、
(1) ShowNotifyWnd.mac を「受信が一段落した時」に指定
(2) 何らかの方法で ShowNotifyWnd.mac を実行
(3) [OK]/[キャンセル] を選択
(4) ヘルプの記述どおり「受信が一段落した時」のマクロ、つまり
    ShowNotifyWnd.mac が実行→(2) に戻っている
となるように読めます。
http://hidemaruo.dip.jp:81/turukame/turukame_2/x0306256.html#6289
の投稿を読むと、無限ループするヴァージョンはかつて存在し、
http://hidemaruo.dip.jp:81/hidesoft/hidesoft_8/x28069.html
にて改めて報告されたことにより、
2006/07/19 Ver.4.67 で対処されているようです。
http://hide.maruo.co.jp/software/tkhist.html
 結局
> 「マクロ・マクロ登録・自動実行」の「受信が
> 一段落した時」に指定したマクロが実行されます。
とは一体どういうこと???

[ ]
RE:01998 ShowNotifyWnd関数 ダイアログボNo.02000
秀まるお さん 09/03/12 13:16
 
>  先ずこちらについてですが、[Alt]+[Tab] で切り替えた時は閉じません。こ
> れは仕様?

 通知ウィンドウが出ている状態でAlt+Tabすると、通知ウィンドウがアクティ
ブになるだけでして、秀丸メール本体ウィンドウはアクティブにならないです。
結果として通知ウィンドウは消えない、ということのようです。

> > ShowNotifyWndで通知ウィンドウを表示し、そこの「OK/キャンセル」ボタンを
> > 押してウィンドウ閉じた時に、「マクロ・マクロ登録・自動実行」の「受信が
> > 一段落した時」に指定したマクロが実行されます。(V2.36からそうなった)
> はどういうことでしょう?

 今となっては僕も意味不明なので、とりあえず削除しようかなぁと思います。

[ ]
RE:02000 ShowNotifyWnd関数 ダイアログボNo.02001
K'zawa さん 09/03/12 14:01
 
秀まるおさん、Iranoanさん、こんにちは。
K'zawaです。

>> > 一段落した時」に指定したマクロが実行されます。(V2.36からそうなった)
>> はどういうことでしょう?
>
> 今となっては僕も意味不明なので、とりあえず削除しようかなぁと思います。

なんか聞いたことがあると思って調べてみたら…私でした。

http://hidemaruo.dip.jp:81/hidesoft/hidesoft_8/x28069.html

[ ]
RE:02000 ShowNotifyWnd関数 ダイアログボNo.02002
Iranoan さん 09/03/12 14:05
 
 秀まるおさん今日は、Iranoan です。
>  通知ウィンドウが出ている状態でAlt+Tabすると、通知ウィンドウがアクティ
> ブになるだけでして、秀丸メール本体ウィンドウはアクティブにならないです。
> 結果として通知ウィンドウは消えない、ということのようです。
 仕様という事で理解しました。
 御説明有難うございました。

> > > ShowNotifyWndで通知ウィンドウを表示し、そこの「OK/キャンセル」ボタンを
<snip>
>  今となっては僕も意味不明なので、とりあえず削除しようかなぁと思います。
 解りました。

[ ]
RE:01996 ShowNotifyWnd関数 ダイアログボNo.02003
プックン さん 09/03/13 00:33
 
秀まるお様、こんばんは。

> これはこれで仕様になります。
了解です。

> それと、定期受信で自動起動されるマクロでmessage文を使ってしまうと、そ
>のメッセージボックスが出てる間はマクロがずっと実行中ということになるので、
>定期受信は止まってしまいます。それもまた仕様ってことになります。

>主に、メッセージを出したままマクロの実行も継続させたい時に便利です。

という説明文を読んで私が理解していたのは、ShowNotifyWndはメッセージを
表示しているときでも継続して定期受信を実施するのかと考えていました。
定期受信で受信したメール数をマクロで表示したいと考えていたのですが
ShowNotifyWndで実施すると、
マクロの実行そのものは、継続するのですが
定期受信が停止するのでできないんですね。

下記debug2.macみたいな動作がShowNotifyWndを使えばできるのかな?
とおもっていました。説明していただいた仕様だとできないということが
理解できました。

//debug2.mac
loaddll "TKInfo.dll";
##i = 0;
while( ##i < 5 ) {
 title "Macro実行中" + str(##i) ;
 ##flag = 0 ;
 //定期受信間隔相当と仮定した時間のwait
 while( 1 ) {
  ##sec = val(rightstr(time,2)) ;
  if((##sec % 5) == 4) ##flag = 1 ;
  if((##flag == 1) && ((##sec % 5) == 0)){
   break ;
  }
 }
 //定期受信相当と仮定した時間のwait終了
 ##flag = 0 ;
 //定期受信で受信したメール数を表示する動作(相当)
 ##n = dllfunc("ShowNotifyWnd", "秀丸メール - 受信の通知",
  str(##i) + "通のメールを受信しました。") ;
 ##i = ##i + 1;
}

freedll;
endmacro;
//debug2.mac終わり


> message文を使わないでおけば、少なくともユーザーさんが画面を操作しない
>限り通知ウィンドウは出っぱなしになると思います。(確認はしてないけど)
現在でっぱなしの動作になっています。

[ ]
RE:02003 ShowNotifyWnd関数 ダイアログボNo.02004
秀まるお さん 09/03/13 09:18
 
 「受信が一段落した時」のマクロの中でShowNotifyWnd関数を使うのを僕の所
でもやってみたら、1回目の定期受信で通知ウィンドウが出てくることが確認出
来ました。

 その通知ウィンドウを出っぱなしにしておいても、ちゃんと定期受信すること
も確認出来ました。

 しかし、その定期受信が終わっても、マクロが自動起動されませんでした。

 ということで、これはなんか問題があると思います。

 ということで、とにかくこういう場合もちゃんとマクロを自動起動するように
修正したいと思います。

[ ]
RE:02004 ShowNotifyWnd関数 ダイアログボNo.02005
秀まるお さん 09/03/13 10:48
 
 問題が2つあって、マクロがうまく実行出来てませんでした。

 定期受信自体は通知ウィンドウが出てても動いていたはずだと思いますが…。

 とにかく次のβ版で修正させていただきますので、もしまた次のβ版以降で問
題があったら、すみませんがまた連絡いただきたいと思います。

[ ]
RE:02005 ShowNotifyWnd関数 ダイアログボNo.02006
プックン さん 09/03/14 01:00
 
> 問題が2つあって、マクロがうまく実行出来てませんでした。
>
> 定期受信自体は通知ウィンドウが出てても動いていたはずだと思いますが…。

自宅のあまりメールが頻繁にこない環境で確認していたので
確認する方法がおもいうかばず確認できていませんでした。
Webメールで自分宛てに送信して"debug.mac"で通知ウィンドウがでていても定期受信
でメールが正常に受信しているのを確認できました。

> とにかく次のβ版で修正させていただきますので、もしまた次のβ版以降で問
>題があったら、すみませんがまた連絡いただきたいと思います。
たびたびの対応ありがとうございます。
よろしくお願いいたします。

[ ]
RE:02005 ShowNotifyWnd関数 ダイアログボNo.02012
プックン さん 09/03/18 01:41
 
>2009/03/17 V5.16β7
>バグ修正
>ShowNotifyWnd関数で通知ウィンドウが表示された場合で、
>その通知ウィンドウが出たまま定期受信が起動した時、
>受信が一段落した時のマクロが実行されないバグ修正。

V5.16β7でShowNotifyWndが期待通りの動作をすることを確認しました。対応ありが
とうございました。

[ ]