メールエディタ上でのSelectFolderについNo.40441
styth さん 11/05/08 17:19
 
メールエディタ上でのSelectFolderについて

#n = dllfunc( "ExecAtMain", "SelectFolder", "", "未送信" );

 上記マクロをメールエディタ上で実行しても、未送信フォルダにならない時が
あります。

#n = dllfunc( "ExecAtMain", "SelectPane", 0);   //フォルダ枠へ
#n = dllfunc( "ExecAtMain", "SelectFolder", "", "未送信" );

 だと、うまくいきました。
 仕様でしょうか?

[ ]
RE:40441 メールエディタ上でのSelectFoldNo.40446
秀まるお2 さん 11/05/09 10:51
 
 こちらで簡単にテストした所では、アクティブな枠がフォルダ枠以外になって
るからという理由でSelectFolder関数が失敗する例を見つけることは出来ません
でした。

 失敗する例は1つ見つけました。アカウントグループを作成している場合で、
そのアカウントグループを選択した状態でSelectFolder関数を実行すると失敗す
るようです。これはなぜかというと、SelectFolder関数の第1パラメータで「現
在アカウント」を指示してますが、それが不定になってしまうからです。

 今回のケースはアカウントグループを選択してるからという理由とは別のよう
な気がしますけども…。

 何か具体的に失敗する条件が分かると助かるんですが、分からない場合は、と
りあえず調べていただく方法としてですが、

    #n = dllfunc( "ExecAtMain", "SelectFolder", "", "未送信" );
    if( #n == 0 ) {
        message "SelectFolder失敗";
    }

 とかやっていただくと、たしかにSelectFolder関数が失敗してるかどうか分か
ります。

 たしかに失敗してるとしたら、その理由は…、次のβ版にてSelectFolder関数
が失敗した時の理由をdump.txtに出力するようにしてみます。

[ ]
RE:40446 メールエディタ上でのSelectFoldNo.40447
秀まるお2 さん 11/05/09 15:33
 
 先ほどV5.70β18をアップロードしたんですが、これにて、SelectFolderが失
敗した場合の原因をdump.txtに出力するようにしてみました。

 「全般的な設定・上級者向け・動作の記録」の「秀丸メールの動作をdump.txt
に出力する」をONにして使って欲しいです。

 それでエラーの現象が発生したら、秀丸メールのデータ用フォルダにあるdump.
txtを開いて見ていただくと、その中に、


15:29:14.206 (8574) FrameWnd:TKINFO 8
15:29:14.206 (2662) TKINFO 8
15:29:15.938 (8577) FrameWnd:TKINFO 8 return 00000000

 のように、「TKINFO 8」の関係する記録が出ると思います。そこの「return
00000000」というのがエラーになった記録ということになります。

 エラーになった原因もdump.txtに出てくる可能性が高いですが、出ないことも
あります。ちょっとエラーログを出力する処理が中途半端になったままアップ
ロードしてしまいました。

 ということでこれでお願いしたいです。

 何か「こういう条件だと起きる」みたいな再現条件が分かればこちらでもテス
ト出来るんですが、再現条件が分からない場合はすみませんがこういう方法で記
録を取っていただかないと原因究明出来ないことが多いです。

[ ]
RE:40446 メールエディタ上でのSelectFoldNo.40450
styth さん 11/05/09 18:43
 
> こちらで簡単にテストした所では、アクティブな枠がフォルダ枠以外になって
>るからという理由でSelectFolder関数が失敗する例を見つけることは出来ません
>でした。
 指摘させて頂いたのは、この例です。
 具体的には、メール内容枠のメールアドレスを右クリックして、「〜宛のメー
ル作成」を実行します。
 すると、メールエディタが開きます。
 「あとで送信」を実行した時に、自動起動するマクロに、

$s = dllfuncstr("Bypass_GetWindowText", hidemaruhandle(0) );
if( leftstr( $s, 6 ) == "あとで" ) {
    #n = dllfunc( "ExecAtMain", "SelectFolder", "", "未送信" );
}

 というのがマクロの最後にあるんですが、未送信フォルダに行きませんでした。
 これを報告させて頂きました。

[ ]
RE:40450 メールエディタ上でのSelectFoldNo.40457
秀まるお2 さん 11/05/10 09:37
 
 とりあえずこちらで、

    loaddll "tkinfo.dll";
    $s = dllfuncstr("Bypass_GetWindowText", hidemaruhandle(0) );
    if( leftstr( $s, 6 ) == "あとで" ) {
        #n = dllfunc( "ExecAtMain", "SelectFolder", "", "未送信" );
    }

 ってマクロを作成して、それを「あとで送信/今すぐ送信時」の自動起動マク
ロとして登録して簡単にテストした限りでは再現しないようでしたけども…。

    loaddll "tkinfo.dll";
    $s = dllfuncstr("Bypass_GetWindowText", hidemaruhandle(0) );
    if( leftstr( $s, 6 ) == "あとで" ) {
        #n = dllfunc( "ExecAtMain", "SelectPane", 2 );
        #n = dllfunc( "ExecAtMain", "SelectFolder", "", "未送信" );
    }

 として強制的にメール内容枠をアクティブにしてからSelectFolderするように
しても同じでした。

 とりあえずdump.txtのログを取る作戦をしていただけると助かりますけど、ど
うでしょ?

[ ]
RE:40457 メールエディタ上でのSelectFoldNo.40470
styth さん 11/05/10 20:58
 
> とりあえずdump.txtのログを取る作戦をしていただけると助かりますけど、ど
>うでしょ?
 やってみました。


> 「全般的な設定・上級者向け・動作の記録」の「秀丸メールの動作をdump.txt
>に出力する」をONにして使って欲しいです。
 エラーになった(マクロの動作が思ったようにならなかった)ので、今はOFF
にしました。

> それでエラーの現象が発生したら、秀丸メールのデータ用フォルダにあるdump.
>txtを開いて見ていただくと、その中に、
>15:29:14.206 (8574) FrameWnd:TKINFO 8
>15:29:14.206 (2662) TKINFO 8
>15:29:15.938 (8577) FrameWnd:TKINFO 8 return 00000000
> のように、「TKINFO 8」の関係する記録が出ると思います。そこの「return
>00000000」というのがエラーになった記録ということになります。
 「TKINFO 8」というのを検索してみましたが、ありませんでした。
 TKINFO nn、ならありました。(nnは数字)
 dump.txtを送信した方が良いでしょうか?

> 何か「こういう条件だと起きる」みたいな再現条件が分かればこちらでもテス
>ト出来るんですが、再現条件が分からない場合はすみませんがこういう方法で記
>録を取っていただかないと原因究明出来ないことが多いです。
 具体的には、メール内容枠のメールアドレスを右クリックして、「〜宛のメー
ル作成」を実行します。
 すると、メールエディタが開きます。
 そこで、「あとで送信」を実行した場合です。

 よろしくお願いします。

[ ]
RE:40470 メールエディタ上でのSelectFoldNo.40473
秀まるお2 さん 11/05/10 22:35
 
 「TKINFO 8」が無いということは、SelectFolder関数呼び出しは実行されてな
い可能性が高いんじゃないかと思います。

 例えばマクロの中で

    if( leftstr( $s, 6 ) == "あとで" ) {
        #n = dllfunc( "ExecAtMain", "SelectFolder", "", "未送信" );
    }

 となっているのだとしたら、leftstrを使った条件がFALSEになって、結果とし
てSelectFolderが実行されてないだけという可能性もあるかもしれないです。

 マクロの全体がどうなってるのか僕には分からないのでその辺確認のしようが
無いのですけども、マクロを実行してダメだったケースのdump.txtのその辺の部
分だけでも教えていただければ、具体的にtkinfo.dllの何の関数がどういう順番
で呼ばれてるか程度は調べることが出来ます。

 例えば今ちょっとこちらで、「新規メール」としたエディタ上で、

    loaddll "tkinfo.dll";
    #n = dllfunc( "ExecAtMain", "SelectFolder", "", "未送信" );

 ってマクロを実行した時のdump.txtの内容は、

22:30:34.225 (   0) tid=3876 ExecCommandMacroSub test.mac
22:30:34.225 (8290) tid=3876 EditorWnd:TKINFO 160
22:30:34.225 (5653) tid=3876 tkinfo 160
22:30:34.225 (22364) tid=3876 MuteOther()
22:30:34.225 (22439) tid=3876 MuteOther: OBJECT_0
22:30:34.225 ( 556) tid=3876 CommandExecEvent 24
22:30:34.225 (22364) MuteOther()
22:30:34.225 (22452) MuteOther: ProcessExecEvent()
22:30:34.225 ( 767) ProcessExecEvent
22:30:34.225 (8574) FrameWnd:TKINFO 8
22:30:34.225 (2662) TKINFO 8
22:30:34.225 (2874) TVN_SELCHANGED hitem=002D3200
22:30:34.225 (1844) CFolderPane::RepeatEnd
22:30:34.225 (3658) GetSelection hitem=002D3200
22:30:34.225 (9371) NotifyFolderChanged

 のようになりました。これを見ると、

 TKINFO 160
 TKINFO 8

 のような記録が出てまして、160はExecAtMain、8はSelectFolder関数呼び出し
の処理が実行されてるとか、この辺詳しく情報がdump.txtに出るようになってま
す。なので、dump.txtを見せていただくだけでもマクロが何をしようとしてるの
かおおよそ見当が付きます。

 ここの会議室に書き込んでいただく他に、メールで送っていただいてもいいで
す。送っていただくとしたら、"maruo@mitene.or.jp"にお願いします。

[ ]
RE:40473 メールエディタ上でのSelectFoldNo.40476
styth さん 11/05/10 22:47
 
>    if( leftstr( $s, 6 ) == "あとで" ) {
>        #n = dllfunc( "ExecAtMain", "SelectFolder", "", "未送信" );
>    }
> となっているのだとしたら、leftstrを使った条件がFALSEになって、結果とし
>てSelectFolderが実行されてないだけという可能性もあるかもしれないです。

if( leftstr( $s, 6 ) == "あとで" ) {
    #n = dllfunc( "ExecAtMain", "SelectFolder", "", "未送信" );
}
else message "";

 としてみましたが、messageは表示されませんでした。

> マクロの全体がどうなってるのか僕には分からないのでその辺確認のしようが
>無いのですけども、マクロを実行してダメだったケースのdump.txtのその辺の部
>分だけでも教えていただければ、具体的にtkinfo.dllの何の関数がどういう順番
>で呼ばれてるか程度は調べることが出来ます。
 どこを切り取って、掲載すれば良いのかわからないので、メールで送ります。
 よろしくお願いします。

[ ]
RE:40476 メールエディタ上でのSelectFoldNo.40480
秀まるお2 さん 11/05/10 23:11
 
 dump.txtとマクロをメールで送っていただきありがとうございます。おかげさ
まで原因が分かったような気がします。

 まず、送っていただいたdump.txtの中で、マクロを実行してる部分は1つだけ
だと思います。

20:27:06.690 (   0) tid=592 ExecCommandMacroSub XXXXXXX.mac

 のように、実行しようとしてるマクロ名がdump.txtに出てるので、それで分か
ります。

 で、その部分を見るとですが、まずは「TKINFO 3」というのが出てきます。こ
れはCurrentHeader関数か、それの類似の関数呼び出しがあったことを意味しま
す。

 マクロの中を見ると、10行目と35行目にCurrentHeader関数呼び出しがあ
りますが、35行目の処理が実行されたのだとしたら、その前の34行目の
SetAutoPushTimerMilli関数呼び出しがあるがために、それのTKINFO呼び出しが
dump.txtに出てる必要があります。なので、この「TKINFO 3」の記録は10行目
が実行されたことを意味します。

 そうすると、実は10行目へ行くためには、4行目の

if ( selecting ) {

 の部分がfalse、つまり、範囲選択してない時、という条件になってないとお
かしいです。なぜならそこのif文の中の{}の中の最後に「goto paste」があるか
らです。

 つまり、このマクロは4行目を実行して10行目が実行されて、最終的にはそ
の流れの中で、25行目の「else endmacro;」でマクロが終了しているはずです。

 ということで、やはりマクロのロジック的に、SelectFolder関数呼び出しは実
行されてないはずだと思います。

 とりあえずデバッグ目的で、マクロのあちこちにmessage文を入れて動作を確
認していただく作戦がいいんじゃないかと思います。

 例えば

if ( selecting ) {
    message "範囲選択してる場合の処理へ飛びます";

 とか、

paste:
    message "paste:に入りました";

 とか、とにかくあちこちにmessage文を入れていただければ、マクロがどうい
う順序でどう実行されてるか分かって、結果としてSelectFolder関数呼び出しが
なされてないということも確認いただけるんじゃないかと思います。

[ ]
RE:40480 メールエディタ上でのSelectFoldNo.40482
styth さん 11/05/10 23:30
 
>if ( selecting ) {
> の部分がfalse、つまり、範囲選択してない時、という条件になってないとお
>かしいです。なぜならそこのif文の中の{}の中の最後に「goto paste」があるか
>らです。
> つまり、このマクロは4行目を実行して10行目が実行されて、最終的にはそ
>の流れの中で、25行目の「else endmacro;」でマクロが終了しているはずです。
> ということで、やはりマクロのロジック的に、SelectFolder関数呼び出しは実
>行されてないはずだと思います。
 仰るとおりでした。申し訳ありません。ありがとうございます。
 で、マクロはうまくいきました。未送信フォルダに行くようになりました。

[ ]
RE:40480 メールエディタ上でのSelectFoldNo.40483
秀まるお2 さん 11/05/11 08:38
 
> りますが、35行目の処理が実行されたのだとしたら、その前の34行目の
> SetAutoPushTimerMilli関数呼び出しがあるがために、それのTKINFO呼び出しが
> dump.txtに出てる必要があります。

 間違いがありました。

 SetAutoPushTimerMilliについてはdump.txtには何も記録を出していませんで
した。他にもいくつかの関数はdump.txtに何も記録を出さない物がありました。

[ ]
RE:40473 TKINFO 8記録されました。SelectNo.40516
styth さん 11/05/15 11:30
 
> 「TKINFO 8」が無いということは、SelectFolder関数呼び出しは実行されてな
>い可能性が高いんじゃないかと思います。
 色々やっているんですが、やはり、SelectFolderで、未送信フォルダに行かな
い場合があります。
 今度は、「TKINFO 8」がdump.txtの中にちゃんと記録されました。
 dump.txtを送信しますので、調査してみて下さい。
 よろしくお願いします。

[ ]
RE:40516 TKINFO 8記録されました。SelectNo.40520
秀まるお2 さん 11/05/16 09:30
 
 dump.txtとマクロ送っていただきありがとうございます。調べてみたら、たし
かにSelectFolderが想定外の所でエラーになってることが確認出来ました。

 いろいろ再現する方法を探していたら、1つ再現手段を見つけました。「全般
的な設定・フォルダ」の「表示するフォルダ」の中の、「受信フォルダ」と「未
送信フォルダ」の両方のチェックをOFFにしているケースで、受信フォルダも未
送信フォルダも両方非表示になってるようなアカウントがあると、そこの場合に
未送信フォルダの選択が失敗するようです。

 ということで、そこのオプションはどうなっているでしょうか。

 とりあえずそういう条件の時におかしいのだというつもりで修正させていただ
きます。

[ ]
RE:40520 TKINFO 8記録されました。SelectNo.40521
秀まるお2 さん 11/05/16 09:46
 
 もっとテストしたら、「受信フォルダ」がONでも「未送信フォルダ」がOFFだ
と再現出来る条件もありました。アカウントを一度も展開してない状態だとそれ
でも起きるようです。

 それも修正させていただきます。

[ ]
RE:40520 TKINFO 8記録されました。SelectNo.40530
styth さん 11/05/16 17:41
 
> いろいろ再現する方法を探していたら、1つ再現手段を見つけました。「全般
>的な設定・フォルダ」の「表示するフォルダ」の中の、「受信フォルダ」と「未
>送信フォルダ」の両方のチェックをOFFにしているケースで、受信フォルダも未
>送信フォルダも両方非表示になってるようなアカウントがあると、そこの場合に
>未送信フォルダの選択が失敗するようです。
> ということで、そこのオプションはどうなっているでしょうか。
 「受信フォルダ」と「未送信フォルダ」の両方のチェックをOFFにしています。
 「受信フォルダ」と「未送信フォルダ」の両方、非表示になっています。

[ ]