V6.21でマクロが動かなくなったNo.45603
Makkie さん 14/01/10 11:31
 
V6.21の秀丸メールのマクロでで、findhidemaru(ファイル名)が
効かなくなりました。ウィンドーはあるのに -1 が返ってきます。

V6.18では正常です(直ぐにV6.18に戻しました)。

よろしくお願いします。

[ ]
RE:45603 V6.21でマクロが動かなくなったNo.45604
秀まるお2 さん 14/01/10 11:57
 
 秀丸メールのレベルダウンでご迷惑おかけしてすみません。

 最近のバージョンで1ついじった箇所があるのでそれが関係してるんだと思い
ます。その関係というのは、Version 6.19β14での、

 − マクロで「changename "a.csv"; SAVEAS;」とした時に、名前を付けて
   保存ダイアログボックスの「ファイルの種類」の所がCSVファイル(
   *.csv)」に切り替わるようにした。

 って仕様変更になります。

 それが関係してるんだとは思うんですが、すみませんが再現手順がちょっと分
からないです。

 秀丸メールのエディタ・ウィンドウには、そもそもファイル名って物が付いて
無いです。なので、changenameで無理矢理ファイル名を付けて、それを
findhidemaruで探した場合って話かと思ったんですが、…

 例えばエディタウィンドウを2つ開いて、

 1つ目の方で、

    changename "テスト.txt";

 を実行し、もう1つの方で、

    #wnd = findhidemaru("テスト.txt");
    message str(#wnd);

 をして正しい数値(1)が出るかどうかって話かと思うのですが、こちらで
テストした限りはV6.21でも正しい数値が出るようでした。

 ということは、何か別のケースになるかと思うのですが、それがいまいち思い
つかないです。

 どういう処理をされてるのか教えて欲しいです。

[ ]
RE:45604 V6.21でマクロが動かなくなったNo.45605
Makkie さん 14/01/10 13:19
 
この件に関するマクロの処理の基本的流れは、

-----------------------------------------------------------
(エディタウインドーAで)

    ##n = dllfunc ( "NewMail" ); // = エディタウィンドーB
    changename dllfuncstr ( "HomeDir" ) + "filename.txt";

・・・・・・・・
(エディタウィンドーA終了。エディタウィンドーBは残ったまま)
(エディタウィンドーCを作る)
・・・・・・・・
(新たに作ったエディタウインドーC、ないしは自動起動マクロから)

    #WindowID  = findhidemaru ( "filename.txt" );

  (このとき #WindowID が -1 になる)
-----------------------------------------------------------

です。名前(ファイル名)でエディタウィンドーBを識別するのは、
その方が簡便だからです。

なお、数年前にも全く同じ症状が発生しました。

よろしくお願いします。





> 秀丸メールのレベルダウンでご迷惑おかけしてすみません。
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
> どういう処理をされてるのか教えて欲しいです。

[ ]
RE:45605 V6.21でマクロが動かなくなったNo.45606
秀まるお2 さん 14/01/10 14:50
 
 簡単なテストマクロで、例えば

    changename dllfuncstr ( "HomeDir" ) + "filename.txt";

 としてから別ウィンドウでfindhidemaruするとうまく動作するようです。

テストマクロ:

    loaddll "tkinfo.dll";
    ##n = dllfunc ( "NewMail" ); // = エディタウィンドーA
    #wnd_a = hidemaruhandle(0);
    ##n = dllfunc ( "NewMail" ); // = エディタウィンドーB
    #wnd_b_1 = hidemaruhandle(0);
    changename dllfuncstr ( "HomeDir" ) + "filename.txt";
    setactivehidemaru #wnd_a;
    #find = findhidemaru( "filename.txt");
    message str(#find);
    #wnd_b_2 = hidemaruhandle( #find );
    message "#wnd_b_1 = " + str(#wnd_b_1) + "\n#wnd_b_2 = " + str(#wnd_b_2);

 このマクロならうまく動くことだけ先に確認いただけますでしょうか。

 もし上記マクロでうまく動くなら、つまり、changenameしてから一度マクロを
終了し、何か別の処理の最中にchangenameしたファイル名が消えてしまい、あと
でfindwindowしても見つからない、ということなのかなぁと思います。

 何をしたらファイル名が取り消されるのかがよく分からないのですが、とりあ
えずソースコードの比較などして探してみます。

 とりあえずエディターウィンドウAを閉じるだけなら大丈夫みたいなので、別
の操作が関係してるような気がしますけども。

[ ]
RE:45606 V6.21でマクロが動かなくなったNo.45608
秀まるお2 さん 14/01/10 16:31
 
 っと書いた所でしたが、ソースコードを旧バージョンと比較してたら原因が分
かったような気がします。

 メールのエディタ・ウィンドウにテキストデータをセットしなおす処理で、フ
ァイル名をクリアするようになってしまってました。

 例えば「表示・メールのヘッダ」の中のコマンドを実行してヘッダの表示スタ
イルを切り替えたりすると、changenameしてたファイル名が消えるようです。あ
と他には、受信系メールを開いてるウィンドウで「下のメール」を実行した時に
も消えるようです。

 旧バージョンとの互換性を維持するように修正させていただきまして、とりあ
えず一回、V6.22β1としてアップロードさせていただきます。

[ ]
RE:45606 V6.21でマクロが動かなくなったNo.45609
Makkie さん 14/01/10 17:33
 
提示されたマクロは正常動作します。
提示されたマクロの修正版を張り付けます。
私の環境でバグが再現します。
この修正版は、V6.18では正しく動作します。

よろしくお願いします。

loaddll "tkinfo.dll";
##n = dllfunc ( "NewMail" ); // = エディタウィンドーA
#wnd_a = hidemaruhandle(0);
##n = dllfunc ( "NewMail" ); // = エディタウィンドーB
#wnd_b_1 = hidemaruhandle(0);
changename dllfuncstr ( "HomeDir" ) + "filename.txt";
$$s = dllfuncstr ( "SetHeader", "Subject", "SUBJECT" );
//##n = dllfunc ( "SwitchHeaderView", 0 );
//(SetHeaderをSwitchHeaderViewに代えても再現。もっと他にあるかも)
setactivehidemaru #wnd_a;
#find = findhidemaru( "filename.txt");
message str(#find);
#wnd_b_2 = hidemaruhandle( #find );
message "#wnd_b_1 = " + str(#wnd_b_1) + "\n#wnd_b_2 = " + str(#wnd_b_2);



> 簡単なテストマクロで、例えば
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>の操作が関係してるような気がしますけども。

[ ]
RE:45609 V6.21でマクロが動かなくなったNo.45610
秀まるお2 さん 14/01/10 18:01
 
 再現マクロまで作っていただいてすみません。

 たしかにSwitchHeaderViewがあるとダメってことで、こちらで再現した現象と
同一なのが確定出来ました。

 今日中にアップロードできると思います。少々お待ちください。

[ ]
RE:45610 V6.21でマクロが動かなくなったNo.45619
Makkie さん 14/01/13 08:32
 
V6.22b1で、V6.21で動かなくなったマクロが正常動作することを
確認しました。

>
> 今日中にアップロードできると思います。少々お待ちください。

[ ]