ウインドウの切り替えと終了についてNo.01937
ばほ さん 01/04/04 12:07
 
ウインドウを切り替えて動作させるマクロ(鶴亀メール用)を作ったのですが、どう
も動きが安定しません。
具体的には、鶴亀メールで、「受信したメールの内容一部を変数に入れて、別で利用
する」ために、受信したメールを、エディタ(転送)で開き、処理が終わったら、そ
のウインドウ(転送メール)を閉じたいのです。

それで、次のようなマクロを書きました。

#n =dllfunc("MakeForward");
#o_winh = hidemaruhandle(0);

新しく作成した転送メール上での処理

#n =dllfunc("SetMainWndTop");
closehidemaruforced(#o_winh);
if( !result ) message "終了失敗です(1)";

が、うまくゆくときと「終了失敗です(1)」と表示されるときがあります。何か根本
的に間違えているのでしょうか?


[ ]
RE:01937 ウインドウの切り替えと終了につNo.01938
ひろ さん 01/04/04 12:36
 
 ばほさん今日は、ひろです。
> #n =dllfunc("SetMainWndTop");
> closehidemaruforced(#o_winh);
> if( !result ) message "終了失敗です(1)";
>
> が、うまくゆくときと「終了失敗です(1)」と表示されるときがあります。何か根本
 取り敢えず、SetMainWndTop が成功しているかチェックするようにしては
如何でしょうか? また SetMainWndTop は、必ず鶴亀本体が起動済みである
必要がありますが、その辺りは問題ないですか?

[ ]
RE:01937 ウインドウの切り替えと終了につNo.01939
TAKA さん 01/04/04 12:39
 
TAKA です。

>#n =dllfunc("MakeForward");
>#o_winh = hidemaruhandle(0);
>
>新しく作成した転送メール上での処理
>
>#n =dllfunc("SetMainWndTop");
>closehidemaruforced(#o_winh);
>if( !result ) message "終了失敗です(1)";
>
>が、うまくゆくときと「終了失敗です(1)」と表示されるときがあります。何か根本
>的に間違えているのでしょうか?

「新しく作成した転送メール上での処理」で、何をしているのかが
分かりませんが、closehidemaruforcedをする前に、
closehidemaruforcedで指定するハンドル以外をアクティブにして
いないのではないでしょうか?
#dllfuncを使っているけど、ここで何かしているのかな?
##何のdllを使用しているんだろう?

closehidemaruforcedとclosehidemaruの違いは、更新がかかったフ
ァイルの扱いが違うだけです。
で、closehidemaruに仕様にはヘルプにも
> 番号(ハンドルも可)で指定した秀丸を終了させます。ただし、
>自分自身を指定することはできません。
と書かれています。

ただ、うまく行く時もあるというのが原因不明ですね。

「新しく作成した転送メール上での処理」自体に別のハンドルをア
クティブにする場合としない場合があるのかもしれません。

不具合を再現出来る、必要最小限のマクロ(そのマクロを無編集で
実行しても、再現出来ると思われる最小限のマクロ)を教えて頂け
ると原因が分かるかも。

[ ]
RE:01939 ウインドウの切り替えと終了につNo.01940
TAKA さん 01/04/04 12:52
 
TAKA です。

補足です。

loaddllをどこかで使われていると思いますが、仕様は

>ロードされるのは現在の秀丸についてだけなので、nexthidemaru文
>等で他の秀丸に切り替わった場合は改めてloaddllしなおす必要が
>あります。

です。

秀丸のウィンドウを切り替えるのでしたら、このことを考慮してい
ないのではないでしょうか?
#これが、一番あやしそう。
##やはり、「新しく作成した転送メール上での処理」が何をして
  いるかが分からないと、これ以上の話は無理かも。

[ ]
RE:01940 ウインドウの切り替えと終了につNo.01941
ばほ さん 01/04/04 13:13
 
ひろさん、TAKA さん、早速の回答ありがとうございます。

>>ロードされるのは現在の秀丸についてだけなので、nexthidemaru文
>>等で他の秀丸に切り替わった場合は改めてloaddllしなおす必要が
>>あります。
>
そうなんですか。これが原因かもしれません。(新しく作成した転送メール上での処
理)というのは、次のようなものです。

#LineCount =dllfunc("RootBodyLineCount");
if (#LineCount > #Tell_body) #LineCount = #Tell_body;
$body = "";
#i =0;
while(#i <#LineCount ){
$body = $body + dllfuncstr("RootBodyLine",#i );
#i =#i +1;
}

この後で、dllfunc("SetMainWndTop")をしているのですが、loaddllし直していない
ので、これがうまくゆかず、ウインドウが切り替わらなければ、closehidemaruforce
d も失敗しますね。

ウインドウが切り替わるごとに、loaddllし直すようになおしてみます。


[ ]
RE:01941 ウインドウの切り替えと終了につNo.01943
ひろ さん 01/04/04 18:23
 
 ばほさん今日は、ひろです。
> ウインドウが切り替わるごとに、loaddllし直すようになおしてみます。
 鶴亀のヘルプには書いていないので、秀丸のヘルプだけでも用意しておか
ないと、この辺りのことはどうしようも無いのですね。

 あと MakeForward で開いたウィンドを閉じた後、マクロが終了して良い
のなら、SetMainWndTop や hidemaruhandle を使わず、
freedll;
quit;
の方が速いです。

[ ]
RE:01943 ウインドウの切り替えと終了につNo.01945
ばほ さん 01/04/05 09:41
 
ウインドウが切り替わるごとにloaddllし直して、一件落着かと思ったら・・・、や
はり安定しません。
安定しないと言うのがくせ者で、問題なく動作するときもあります。
抜粋して作り直したマクロを添付します。
これでも、正しく終了する場合と、ダメな場合があります。実際のマクロよりは、正
しく終了する確立が高いような気がします。最初の2行に、自分のメールアドレスと、
メール送信できるアカウント名を設定します。何かメールを選択した状態でマクロを
実行します。


$transfer = "???@????";
$accountn = "アカウント名";

loaddll "TKInfo.dll";
#n =dllfunc("MakeForward");
#o_winh = hidemaruhandle(0);
#LineCount =dllfunc("RootBodyLineCount");
$body = "";
#i =0;
while(#i <#LineCount ){
$body = $body + dllfuncstr("RootBodyLine",#i );
#i =#i +1;
}
$body = leftstr( $body, 32 );
message $body;
#n =dllfunc("SetMainWndTop");
if( #n == 0 ) message "SetMainWndTop Error 1";
loaddll "TKInfo.dll";
closehidemaruforced(#o_winh);
if( !result ) message "closehidemaruforced Error 1";
#n =dllfunc("NewMail");
#Trs_winh =hidemaruhandle(0);
$s =dllfuncstr("SetHeader","To", $transfer);
$s =dllfuncstr("SetHeader","Subject", "マクロの実験");
#n =dllfunc("SetEditorAccount", $accountn);
moveto 0,0;
insert $body;
#n =dllfunc("SendLater");
#n =dllfunc("SetMainWndTop");
if( #n == 0 ) message "SetMainWndTop Error 2";

loaddll "TKInfo.dll";
closehidemaruforced(#Trs_winh);
if( !result ) message "closehidemaruforced Error 2";


[ ]
RE:01945 ウインドウの切り替えと終了につNo.01946
TAKA さん 01/04/05 11:54
 
TAKA です。

>安定しないと言うのがくせ者で、問題なく動作するときもあります。
>抜粋して作り直したマクロを添付します。

エラーメッセージ(closehidemaruforced Error 2)が出るというこ
とですよね。

鶴亀メールは使っていないのですが、先ほどダウンロードして試し
てみました。(10分くらいしか、使っていませんが)
私の所では、受信メールを開いた状態で、マクロを10回ほど動か
してみたところ、正常に動作しました。(未送信に転送メールが作
成され、受信メールも転送メールも閉じられている)

ただ、マクロを見ているとソース上で怪しい所がありました。

>#n =dllfunc("SetMainWndTop");
>if( #n == 0 ) message "SetMainWndTop Error 2";
>
>loaddll "TKInfo.dll";
>closehidemaruforced(#Trs_winh);

closehidemaruforcedを実行する時に、本体がアクティブになって
いますよね。
その状態で、loaddllやclosehidemaruforcedをしても、はたして正
常に機能するものなのでしょうか?
本体は特殊な扱いになると思うので、loaddllやclosehidemaruforced
は、通常のウィンドウ(新規メールや転送メール等)から発行すべ
きだと思います。(仕様には何も明記はされていませんが)
今回の「closehidemaruforced」は他に通常のウィンドウでアクテ
ィブに出来るものがないので、ひろさんが言われている通り、
「quit」を使用された方が素直だと思います。

もし、本体自体が通常のウィンドウとして扱えるなら、本体のみが
起動している状態で、以下のマクロを実行したら、本体が閉じられ
ないとおかしいですよね。

// マクロ(ここから)
    loaddll "TKInfo.dll";
    #FH = hidemaruhandle( 0 );      // 本体のウィンドウを取得
    #Sts = dllfunc( "NewMail" );    // 新規メール
    closehidemaruforced( #FH );     // 本体を終了
// マクロ(ここまで)

このマクロでは、本体を閉じることは出来ませんので、本体は特殊
な扱いであると考えてよさそうです。

それと、
>#n =dllfunc("NewMail");
後の、
>$s =dllfuncstr("SetHeader","To", $transfer);
は、loaddllをしなくても問題ないのでしょうか?
サンプルではloaddllは使用していないし、正常に動作はしています
がNewMailでは他のウィンドウを新しく開設するので、loaddllが必
要な気がします。
>ロードされるのは現在の秀丸についてだけなので、nexthidemaru
>文等で他の秀丸に切り替わった場合は改めてloaddllしなおす必要
>があります。
だけから、判断するとですが。

そもそも、loaddllしなおす必要がなぜあるのかも謎ですけど。

今回のレスは、鶴亀のことをよく知らないため、推測をかなり含ん
でいます。

何にせよ、「quit」の使用で解決するのではないでしょうか?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

[ ]
RE:01945 ウインドウの切り替えと終了につNo.01947
ひろ さん 01/04/05 12:26
 
 ばほさん今日は、ひろです。
> これでも、正しく終了する場合と、ダメな場合があります。実際のマクロよりは、正
 どの様に駄目なのでしょうか? (どのエラメッセージがでやすいなど)
 また実際のマクロもこの流れなら、実用的とはいえません。何故かという
と、文字列変数には 8000 バイト程度という制限があるためです。

 P.S ばほさんは、このマクロで結局何を実現したいのでしょうか?

[ ]
RE:01947 ウインドウの切り替えと終了につNo.01948
TAKA さん 01/04/05 13:23
 
TAKA です。

> P.S ばほさんは、このマクロで結局何を実現したいのでしょうか?

元発言「1937」にあるように、

>具体的には、鶴亀メールで、「受信したメールの内容一部を変数に入れて、別で利用
>する」ために、受信したメールを、エディタ(転送)で開き、処理が終わったら、そ
>のウインドウ(転送メール)を閉じたいのです。

のようです。

ここで重要になるのは、内容一部という部分だと思います。今回の
マクロは不具合を再現するための、マクロと理解しています。
実際の文字列取り込みは必要な部分という処理になっていると思い
ます。
今回は、テストさえ出来ればいいので、適当にループさせて文字列
を取得しているのだと思います。
#でも、テストにしても、クリップボード経由の方がいいかもしれ
 ませんね。

このマクロを動かす時のメールは、2、3行程度のものを利用すれ
ば問題はないと思います。

[ ]
RE:01948 ウインドウの切り替えと終了につNo.01949
ひろ さん 01/04/05 18:37
 
 TAKA さん今日は、ひろです。
> 元発言「1937」にあるように、
は解っていますが、MakeForward, NewMail と何故 2 回に別けて処理してい
るか解らないのです。

[ ]
RE:01949 ウインドウの切り替えと終了につNo.01950
TAKA さん 01/04/05 19:31
 
TAKA です。

>は解っていますが、MakeForward, NewMail と何故 2 回に別けて処理してい
>るか解らないのです。

メールへの問い合わせ関数(指定行の取り出し)には、「返信元/
転送元」に対してしか出来ませんので、MakeForwardで、元メールか
ら返信メールを作成し、そこから情報を取得します。

その後で、NewMailで、後で利用するためのメールを作成しています。

[ ]
RE:01950 ウインドウの切り替えと終了につNo.01951
ひろ さん 01/04/05 20:01
 
 TAKA さん今日は、ひろです。
> メールへの問い合わせ関数(指定行の取り出し)には、「返信元/
 ばほさんのコメントを待った方がよいかもしれませんが、
> その後で、NewMailで、後で利用するためのメールを作成しています。
 なぜ NewMail 開き直す必要があるか、つまりMakeForward で開いたウィ
ンドをそのまま使えば良いのではないかということを言いたいのです。

[ ]
RE:01951 ウインドウの切り替えと終了につNo.01952
TAKA さん 01/04/05 20:53
 
TAKA です。

>> その後で、NewMailで、後で利用するためのメールを作成しています。
> なぜ NewMail 開き直す必要があるか、つまりMakeForward で開いたウィ
>ンドをそのまま使えば良いのではないかということを言いたいのです。

メール内容の一部を取り出す時に、不要な部分を削除するよりも、
必要な部分を取り出すほうが簡単だからだと思います。
秀丸で言えば、「grep」などのようなイメージだと思います。
必要な部分は別ウィンドウで作業した方がやり易いという単純な理
由だと思います。

あくまでも私の推測なので、ひろさんが言われるように、ばほさん
のレスを待つしかないかも。

[ ]
RE:01946 ウインドウの切り替えと終了につNo.01953
杉浦 まさき さん 01/04/06 01:12
 
TAKA さん、お久しぶりです。
杉浦 まさき です。

本題とは外れますが…

>そもそも、loaddllしなおす必要がなぜあるのかも謎ですけど。

秀丸はウィンドウ毎に一つの独立したプログラム(プロセス)として
動作しています。
そして、DLL は各プログラム(プロセス)毎にロード・アンロードする
必要があるためです。
#というわけで loaddll したら同じウィンドウ中で
 freedll することを忘れずに〜(^^;。

あと、あるウィンドウで DLL をロードした状態で
別のウィンドウにマクロの制御が移ったら、
そのウィンドウでも(loadll しなくても)自動的に DLL をロードする、
という作りにする事は可能だと思いますが、ロードのオーバーヘッドとか
自動アンロードのタイミングとか異常終了した場合の事を考えると、
今の仕様が妥当かなぁ…という気がします。


[ ]
RE:01953 ウインドウの切り替えと終了につNo.01954
TAKA さん 01/04/06 09:43
 
ちは。TAKA です。

>#というわけで loaddll したら同じウィンドウ中で
> freedll することを忘れずに〜(^^;。

ということは、秀丸の方では、
              ^^^^^^^^
>freedllしないままマクロを終了すると、ロードしたdllはそのまま
>ロードされたままになります。
という仕様からすると、

ウィンドウを切り替えた後に、loaddllだけをしていると、切り替
える前のdllがメモリに残ったままになるということになりそうで
すね。
安全のために、秀丸が終了する時に、loaddllしたままのものは、
解放を行ってくれているとありがたいですが、してくれてるのかな?

杉浦さんが言われているように、切り替える前にfreedllをしてお
くべきだとは思いますが。
#これって、結構知らない人がいるのでは。



>あと、あるウィンドウで DLL をロードした状態で
>別のウィンドウにマクロの制御が移ったら、
>そのウィンドウでも(loadll しなくても)自動的に DLL をロードする、
>という作りにする事は可能だと思いますが、ロードのオーバーヘッドとか
>自動アンロードのタイミングとか異常終了した場合の事を考えると、
>今の仕様が妥当かなぁ…という気がします。

ふむふむ。そうなんですか。そういう可能性があるなら、確かに今
の仕様が妥当かもしれませんね。

鶴亀の方は、本体が一つのプロセスとして動いていて、その下でメ
^^^^^^^^
ール用のウィンドウが子プロセスで動いている(推測ですが)ので、
loaddllし直す必要がないと思いますが、私の考えはあっていると
思われますか?(親が持っているものは、子も使える)
メール用のウィンドウを開いた後で、本体の方を閉じることも可能
ですが、その時には、本体は見えていないだけで、裏で隠れて動い
ていると認識しています。
それなら、鶴亀の方では、サンプル通り、loaddllし直す必要がな
いと納得出来るのですが。
#何せ、鶴亀はちょこっと触っただけなので、よく分かりませんで
 した。

[ ]
RE:01952 ウインドウの切り替えと終了につNo.01955
ばほ さん 01/04/06 14:04
 
TAKAさん、ひろさん、レスが遅くなってすみませんでした。
その後、自分なりにいろいろ試していました。

何をしようとしているかは、ご推測の通りです。
メールを受信したときに重要メールかどうか判断して、重要ならSubject, Fromと本
文中のキーワードなどを携帯電話に通知するマクロを作ろうとしています。
while(dllfunc("SelectRecvMail")) で、新規に受信したメールの情報を集めて、最
後に新規メールを作成しています。昨日付けたマクロは、テスト用で一部を抜粋した
ものです。

それで、その後自分なりに調べたところ、いくつか分かったことは、
1.鶴亀メールでは loaddll は、本体でのみ行える(他のウインドウではloaddllしな
くてもよいらしい)
2.問題が起きるのは最初にMakeForwardで開いたウインドウを閉じるときに正常に閉
じられない。そうすると後半のウインドウも閉じられない。
3.closehidemaruforcedが失敗したときに、おなじハンドルを指定して setactivehid
emaru を呼んでも、目的のウインドウがアクティブにならない。

ただ、正しく動作するときもあるというのが厄介で、原因の特定には至っていません。

本文を参照しなければ(MakeForwardでメールを開かなければ)正常に動作するので、
仕様を「本文の一部を転送する機能は無し」とすれば、よいのですが、それも悔しい
のでもう少しがんばりたいです。

[ ]
RE:01955 ウインドウの切り替えと終了につNo.01956
TAKA さん 01/04/06 14:37
 
TAKA です。

>2.問題が起きるのは最初にMakeForwardで開いたウインドウを閉じるときに正常に閉
>じられない。そうすると後半のウインドウも閉じられない。

closehidemaruforced(#o_winh);
の部分だと思いますが、

「1946」で書いた通り、
>closehidemaruforcedを実行する時に、本体がアクティブになって
>いますよね。
>その状態で、loaddllやclosehidemaruforcedをしても、はたして正
>常に機能するものなのでしょうか?
>本体は特殊な扱いになると思うので、loaddllやclosehidemaruforced
>は、通常のウィンドウ(新規メールや転送メール等)から発行すべ
>きだと思います。(仕様には何も明記はされていませんが)
が関係してかもしれません。
#loaddllは関係ないようですが。

closehidemaruforced(#o_winh);
の前に
#n =dllfunc("NewMail");
を持ってきて、通常のウィンドウから「closehidemaruforced」を
              ^^^^^^^^^^^^^^^^
発行してみてはどうでしょうか?

[ ]
RE:01956 ウインドウの切り替えと終了につNo.01957
ばほ さん 01/04/06 15:02
 
ばほです。こんにちは
>
>closehidemaruforced(#o_winh);
>の前に
>#n =dllfunc("NewMail");
>を持ってきて、通常のウィンドウから「closehidemaruforced」を
>              ^^^^^^^^^^^^^^^^
>発行してみてはどうでしょうか?
>
つまり、メインウインドウから、他のウインドウは閉じることができないということ
でしょうか?

これが鶴亀の仕様だとするとどうしようもないのですが、だとすると最後の通常ウイ
ンドウはどうやって閉じたらよいのでしょうか?

[ ]
RE:01957 ウインドウの切り替えと終了につNo.01958
TAKA さん 01/04/06 15:45
 
TAKA です。

>これが鶴亀の仕様だとするとどうしようもないのですが、だとすると最後の通常ウイ
>ンドウはどうやって閉じたらよいのでしょうか?

仕様かどうかは不明ですが、「1946」で書いた通り、「quit」です。

[ ]
RE:01958 ウインドウの切り替えと終了につNo.01959
ばほ さん 01/04/06 16:39
 
今、マクロの動きをみていて気が付いたのですが、

#n =dllfunc("NewMail");
#Trs_winh =hidemaruhandle(0);
message "新規メールが一番上?";

これを実行したときに、「新規メールが一番上?」と表示されているとき、新規メー
ルは画面上では一番上に来ていない(タスクバー上でもへこんでいるのは、別のウイ
ンドウ)のですが、それは正常でしょうか?

通常ウインドウから、closehidemaruforced をしてみたのですが、やはり closeでき
ませんでした。

#n =dllfunc("NewMail");
#Trs_winh =hidemaruhandle(0);
(処理)
#n =dllfunc("MakeForward");
#o_winh = hidemaruhandle(0);
(テキスト取り出し)
setactivehidemaru #Trs_winh;
closehidemaruforced(#o_winh);

と、しているのですが、下から2行目の setactivehidemaru がうまく動作していな
いような気がします。


[ ]
RE:01959 ウインドウの切り替えと終了につNo.01960
TAKA さん 01/04/06 17:20
 
TAKA です。

>#n =dllfunc("NewMail");
>#Trs_winh =hidemaruhandle(0);
>message "新規メールが一番上?";
>
>これを実行したときに、「新規メールが一番上?」と表示されているとき、新規メー
>ルは画面上では一番上に来ていない(タスクバー上でもへこんでいるのは、別のウイ
>ンドウ)のですが、それは正常でしょうか?

それは、正常ではないと思います。
ちなみに、タスクバー上でへこんでいるのは、鶴亀本体でしょうか?

NewMailでアクティブになっていない状態で、hidemaruhandleが実行
されているので、正常に動作していないようですね。
NewMail関数内で完全にアクティブになるのを待たずに、関数を抜け
ているのではないかと思います。そのため、タイミングによっては、
アクティブになっている場合やなっていない場合があるような気が
します。
おそらく、不具合だと思いますので、報告した方がよさそうですね。
#不具合報告は、どこでするのがいいのかな?
##鶴亀用の会議室かな?
###ここで、いいのかな?


もしくは、常駐ソフトとのからみがあるかもしれません。
過去(「1933」を参照)に、ウィンドウの切り替えがうまく行かない
は常駐ソフトの設定のせいだったというのがありました。
#今回は、関係ないとは思いますが。


どうも不具合のようですので、私がお付き合いできるのはここまで
のようです。
私のこれまでのレスは、何の解決にもなっていないのに、何回も付
き合わせてしまって申し訳ありませんでした。

不具合(確定ではありませんが)が、解決されるといいですね。

それでは。

[ ]
RE:01959 ウインドウの切り替えと終了につNo.01961
ばほ さん 01/04/06 17:35
 
やはり、TAKAさんのおっしゃるとおり、不具合のようです。

#n =dllfunc("NewMail");
#Trs_winh =hidemaruhandle(0);
message "OK 1";
$s =dllfuncstr("SetHeader","To", "xxx@aa.aa");
$s =dllfuncstr("SetHeader","Subject", "TEST");
#n =dllfunc("SetEditorAccount", "仕事用");
message "OK 2";

上記マクロを実行したときに、通常なら、"OK 1"が出たときに、空白の新規メールウ
インドウがトップにあり、"OK 2"が、出たときに、ヘッダ部分に値が書き込まれます。

ところが、そうならない状況がありました。常駐鶴亀の状態で、マクロを起動(送受
信が完了したときに実行するマクロに登録)して、その中に上記マクロが含まれてい
ると、"OK 1"が出たとき、新規メールウインドウはトップになく、"OK 2"が出たとき
も、新規メールのヘッダは変わりません。

新規作成直後にトップに来ていないということは、#Trs_winh に正しいハンドルが設
定されていない可能性があり、そうだとすると、closehidemaru できないのも納得で
きます。

これがすべての原因なのかはわかりませんが、マクロが正しく動かない大きな原因の
ような気がします。対処法が分からないのですが、とりあえず、鶴亀をずっと起動し
た状態で実行すれば問題を回避できています。

本当にこれだけが原因なのかもう少し調査してみます。

> 私のこれまでのレスは、何の解決にもなっていないのに、何回も付
> き合わせてしまって申し訳ありませんでした。

とんでもありません。こちらこそいろいろお手数をおかけして申し訳ありませんでし
た。
ほとんど初めて、loaddll などを使ってマクロを書いているので、改めていろいろ勉
強になりました。

[ ]
RE:01955 ウインドウの切り替えと終了につNo.01962
ひろ さん 01/04/06 17:37
 
 ばほさん今日は、ひろです。
> メールを受信したときに重要メールかどうか判断して、重要ならSubject, Fromと本
> 文中のキーワードなどを携帯電話に通知するマクロを作ろうとしています。
> while(dllfunc("SelectRecvMail")) で、新規に受信したメールの情報を集めて、最
 やっと解りました。情報を取得したいメールは複数なんですね。確かにこ
の場合は、マクロが終了してしまうので、quit は使えませんね。

 本文を取得せずに、ヘッダ情報だけ抜き取るなら MakeForward は使わず、
NewMail で開いたエディタウィンドと、ExecAt を利用して本体と情報をや
り取りすればよいですが、本文もとなると、ウィンドの切り替えがどうして
も必要になりますね。ただ SelectRecvMail で選択したメールを一々開くの
ではなく、本体選択状態で gettext を使えば、開くウィンドの数を減る分
エラーが減ると思います。

> ただ、正しく動作するときもあるというのが厄介で、原因の特定には至っていませ
>ん。
 OS が好い加減なのかもしれませんが、鶴亀 (というよりは秀丸) のウィ
ンド切り替え関係のマクロは、失敗することが良く有ります。

 最後に鶴亀では loaddll に関しては無実です。詳細は、「
turukame.2:03115」をご覧下さい。

[ ]
RE:01962 ウインドウの切り替えと終了につNo.01963
TAKA さん 01/04/06 18:07
 
TAKA です。

>> メールを受信したときに重要メールかどうか判断して、重要ならSubject, Fromと本
>> 文中のキーワードなどを携帯電話に通知するマクロを作ろうとしています。
>> while(dllfunc("SelectRecvMail")) で、新規に受信したメールの情報を集めて、最
> やっと解りました。情報を取得したいメールは複数なんですね。確かにこ
>の場合は、マクロが終了してしまうので、quit は使えませんね。

えっ、使えないのですか?
私は、てっきり新規メール1通だけに情報を集めて、SendLaterした
後で、その新規メールを捨てる(SendLaterしたので、不要になる)
処理には、「quit」が使える(と同時にマクロも終了)と思ってい
たのですが。

私の勘違いだったら、すみません。

[ ]
RE:01963 ウインドウの切り替えと終了につNo.01964
ばほ さん 01/04/06 18:14
 
ばほです。

>えっ、使えないのですか?
>私は、てっきり新規メール1通だけに情報を集めて、SendLaterした
>後で、その新規メールを捨てる(SendLaterしたので、不要になる)
>処理には、「quit」が使える(と同時にマクロも終了)と思ってい
>たのですが。
>
>私の勘違いだったら、すみません。

quit自体が使えないと言う意味ではなくて、マクロ処理を続ける場合はquitを使うわ
けにはいかないという意味だと思います。

私が作っているマクロでも、SendLater(SendNow)した後に、鶴亀を最初の状態に戻す
(常駐、最小化など)処理などをしたかったので、できればquitではなくて、closeh
idemaruを使っていました。

[ ]
RE:01962 ウインドウの切り替えと終了につNo.01965
TAKA さん 01/04/06 20:14
 
TAKA です。

> 最後に鶴亀では loaddll に関しては無実です。詳細は、「
>turukame.2:03115」をご覧下さい。

情報ありがとうございます。謎だった部分が分かりました。


後は、「1954」で書いた、

>ウィンドウを切り替えた後に、loaddllだけをしていると、切り替
>える前のdllがメモリに残ったままになるということになりそうで
>すね。
>安全のために、秀丸が終了する時に、loaddllしたままのものは、
>解放を行ってくれているとありがたいですが、してくれてるのかな?

の部分について知りたいです。

[ ]
RE:01964 ウインドウの切り替えと終了につNo.01966
TAKA さん 01/04/06 20:20
 
TAKA です。

>私が作っているマクロでも、SendLater(SendNow)した後に、鶴亀を最初の状態に戻す
>(常駐、最小化など)処理などをしたかったので、できればquitではなくて、closeh
>idemaruを使っていました。

なるほど、処理の継続があるなら、確かに「quit」はまずいですね。

[ ]
RE:01954 ウインドウの切り替えと終了につNo.01967
杉浦 まさき さん 01/04/07 01:25
 
ども、杉浦 まさき です。

>安全のために、秀丸が終了する時に、loaddllしたままのものは、
>解放を行ってくれているとありがたいですが、してくれてるのかな?

ウィンドウが閉じる=秀丸のプロセスが終了する
ならアンロードはしてくれると思います。
が、瞬間起動を有効にしていると、上の関係が成り立たないので
DLL はロードされたままになっていると思います。
#ですよね?>担当様

>杉浦さんが言われているように、切り替える前にfreedllをしてお
>くべきだとは思いますが。
>#これって、結構知らない人がいるのでは。

あと、頻繁にウィンドウを行き来する場合は、マクロ終了直前で
それぞれのウィンドウで freedll を1回ずつ呼べばよいですね。

>鶴亀の方は、本体が一つのプロセスとして動いていて、その下でメ
>ール用のウィンドウが子プロセスで動いている(推測ですが)ので、
>loaddllし直す必要がないと思いますが、私の考えはあっていると
>思われますか?(親が持っているものは、子も使える)

子プロセスというか、子スレッドで動いているならその通りです。
#厳密には DLL の作りによるんですが…。

>#何せ、鶴亀はちょこっと触っただけなので、よく分かりませんで
> した。

う〜ん…僕は今 Winbiff を使ってますが、もうちょい安定したら
乗り換えてもいいかなぁ…なんせタダだし(^-^)。
#んでも Winbiff も使い勝手はよくて捨て難いし…悩ましいです(^^;。


[ ]
RE:01967 ウインドウの切り替えと終了につNo.01968
TAKA さん 01/04/07 12:01
 
TAKA です。

>>安全のために、秀丸が終了する時に、loaddllしたままのものは、
>>解放を行ってくれているとありがたいですが、してくれてるのかな?
>
>ウィンドウが閉じる=秀丸のプロセスが終了する
>ならアンロードはしてくれると思います。

プロセス終了時にしてくれていると安心です。
そうでないと、マクロを中断した際に、loaddllしたままの状態と
いうのもありえますし。


>が、瞬間起動を有効にしていると、上の関係が成り立たないので
>DLL はロードされたままになっていると思います。

ここまでは考えませんでしたが、瞬間起動からこぼれた秀丸はプロ
セスが終了するので、その時点でloaddllしたものは解放されます
よね。杉浦さんの言いたいことは、瞬間起動用としてプロセスが残
るものだけがloaddllされたままになっているということですね。
もし、違っていたら指摘して下さい。


>#ですよね?>担当様

この発言に気がついてくれるかな?
もし、次回の秀丸担当さんからコメントがなかったら、情報交換の
会議室の方で聞いてみようと思います。


>>杉浦さんが言われているように、切り替える前にfreedllをしてお
>>くべきだとは思いますが。
>>#これって、結構知らない人がいるのでは。
>
>あと、頻繁にウィンドウを行き来する場合は、マクロ終了直前で
>それぞれのウィンドウで freedll を1回ずつ呼べばよいですね。

そうか、同じウィンドウを行き来する場合は、各ウィンドウで1回
だけloaddllをしておけばいいのですね。気がつきませんでした。
私が想定していたのは、複数のウィンドウを1回ずつ開くことしか
考えていませんでした。
杉浦さんからのコメントがなかったら、同じウィンドウを行き来す
る場合も、毎回loaddllする所でした。


>>鶴亀の方は、本体が一つのプロセスとして動いていて、その下でメ
>>ール用のウィンドウが子プロセスで動いている(推測ですが)ので、
>>loaddllし直す必要がないと思いますが、私の考えはあっていると
>>思われますか?(親が持っているものは、子も使える)
>
>子プロセスというか、子スレッドで動いているならその通りです。

はい、鶴亀の方は、子スレッドで動いているそうですので、loaddll
は、一回で良いそうです。
ひろさんが、わざわざ、鶴亀の方の会議室で質問してくれていまし
た。
ひろさん、ありがとうございました。


>>#何せ、鶴亀はちょこっと触っただけなので、よく分かりませんで
>> した。
>
>う〜ん…僕は今 Winbiff を使ってますが、もうちょい安定したら
>乗り換えてもいいかなぁ…なんせタダだし(^-^)。
>#んでも Winbiff も使い勝手はよくて捨て難いし…悩ましいです(^^;。

私は、Veckyを使用しているのですが、鶴亀では秀丸感覚で入力で
きるというのに魅力を感じています。これには驚かされました。
私の欲しい、スレッド表示とマルチアカウントの機能はあることは
知っているのですが、必要なメールをOutlook形式(拡張子がeml)で
保存出来る機能はあるのかな?あれば、乗り換えも考えるのですが。
あるかないかだけでも結構ですので、知っている人がいれば、教え
て下さい。 > ALL
#質問は、鶴亀の会議室が妥当だとは思うのですが、発言のついで
 に。

[ ]
RE:01967 ウインドウの切り替えと終了につNo.01969
ひろ さん 01/04/07 12:19
 
 杉浦さん今日は、ひろです。脱線モードです。
> う〜ん…僕は今 Winbiff を使ってますが、もうちょい安定したら
 私は今メインが鶴亀で、サブが Winbiff です。もし杉浦さんが、IMAP4、
送信時の uuencode/BinHex、多言語のどれかを頻繁に使っている場合は、時
期尚早かも。

[ ]
RE:01968 ウインドウの切り替えと終了につNo.01970
tatuto さん 01/04/07 13:03
 
tatutoです。

>知っているのですが、必要なメールをOutlook形式(拡張子がeml)で
>保存出来る機能はあるのかな?あれば、乗り換えも考えるのですが。
>あるかないかだけでも結構ですので、知っている人がいれば、教え
>て下さい。 > ALL
>#質問は、鶴亀の会議室が妥当だとは思うのですが、発言のついで
> に。

ファイル-他メーラーへのエクスポートの中だと

形式
UNIX MBOX形式
Ctrl-L!区切り

別枠で
エンコードする(元のエンコードされたメールに戻す訳ではありません)

となっているので出来ないみたいですね

[ ]
RE:01969 ウインドウの切り替えと終了につNo.01972
杉浦 まさき さん 01/04/08 00:49
 
ひろさん、こんばんは。
杉浦 まさき です。

>> う〜ん…僕は今 Winbiff を使ってますが、もうちょい安定したら
> 私は今メインが鶴亀で、サブが Winbiff です。もし杉浦さんが、IMAP4、
>送信時の uuencode/BinHex、多言語のどれかを頻繁に使っている場合は、時
>期尚早かも。

どれも全然使っていないので問題ないです…
というか、前回の発言の後に思い立って移行作業をしてしまいました(^^;。
#アドレス帳はまだですが。

まだ移行してからメールが来てない&出してないので(ToT)
使いやすいかどうかは??ですが。


[ ]
RE:01970 ウインドウの切り替えと終了につNo.01974
TAKA さん 01/04/08 09:51
 
tatutoさん、さっそくの回答ありがとうございます。TAKA です。

>となっているので出来ないみたいですね

そうですか。ちょっと残念です。
#私も、ひろさんのようにメインとサブで必要に応じて使い分けよ
 うかな。


情報、ありがとうございました。

[ ]