秀丸メールのエディタ上から使用できないNo.05617
緒方聡 さん 07/08/10 16:00
 
お世話になっています。

秀丸メール用のマクロを作っていて疑問があるので質問させていただきます。

秀丸メールのエディタからマクロを実行すると

----
エラー
----
TKINFO.DLL: エディタ上で実行できないTkInfo.dll呼び出しが行われました。
関数コード=82
    [OK]
----

というエラーダイアログが表示されます。

マクロの内容は:

loaddll "TKInfo.dll";
#n = dllfunc("SetFindPack", "flag=mark");
#n = dllfunc("DoGrep", dllfuncstr("CurrentAccount"), dllfuncstr("CurrentFold
er"));
endmacro;

です。

発生するエラーは82と83です。

発生する環境を明記しておきます。

秀丸メール: 4.80
秀丸: 7.00 Beta 16
OS: WinXP Pro SP2


上記を踏まえて質問させていただきます。

Q1. 関数コードとは?
エラーメッセージで出力される関数コードがどの関数を表しているかを調べるにはど
のようにすればよいでしょうか?
今回のケースではおそらくSetFindPackとDoGrepだと思いますが、後学のためにご教
示ください。

Q2. エディタ上から使用できない関数
エディタ上から利用できない関数を利用したい場合、SendMessageを使うのが回避策
でしょうか?
何かよい方法はあるでしょうか?


[ ]
RE:05617 秀丸メールのエディタ上から使用No.05618
秀まるお2 さん 07/08/10 16:11
 
 普段ここの会議室は見てないんですけど、コメントさせていただきます。

> Q1. 関数コードとは?
> エラーメッセージで出力される関数コードがどの関数を表しているかを調べるにはど
> のようにすればよいでしょうか?

 実は関数コードというのは内部的な値であって、一般には公開してないです。
ですが、せっかくなので、次の発言にて公開させていただきます。

 必ずしも「1つの関数につき1つの関数コードがある」という訳ではないので、
ある程度はマクロ作者様の方で想像してもらわないといけないですけど。

> Q2. エディタ上から使用できない関数
> エディタ上から利用できない関数を利用したい場合、SendMessageを使うのが回避策
> でしょうか?

 ExecAtMainという関数を使うか、または


   #handle = hidemaruhandle(0);
   #n = dllfunc("SetMainWndTop");
   ...
   ... 目的の処理
   ...
   setactivehidemaru #handle;

 みたいにアクティブウィンドウを切り替えて処理させることになると思います。

[ ]
RE:05618 秀丸メールのエディタ上から使用No.05620
緒方聡 さん 07/08/11 12:28
 
回答ありがとうございます。

>ですが、せっかくなので、次の発言にて公開させていただきます。

ありがとうございます。
参考にさせていただきます。


> ExecAtMainという関数を使うか、または

ありがとうございます。
上記で実現できました。


大変恐縮ですが追加の質問をさせてください。

エディタ上でCurrentFolderを呼び出すと、同関数はそのメールのフォルダを返して
きますが、エディタ上からマクロが実行されても、本体で選択されているフォルダを
取得したいです。
たとえば、草稿フォルダを選択中、新規メールを作成し、そのメール上でマクロを実
行した場合、「身送信」ではなく「草稿」を取得したいのです。

こうした振る舞いは実現可能ですか?
今度こそマクロヘルプをきちんと調べたのですが、見当たりませんでした。

[ ]
RE:05620 秀丸メールのエディタ上から使用No.05621
Iranoan さん 07/08/11 13:28
 
 緒方聡さん今日は、Iranoan です。
> たとえば、草稿フォルダを選択中、新規メールを作成し、そのメール上でマクロを実
> 行した場合、「身送信」ではなく「草稿」を取得したいのです。
 これも ExecAtMain を使えば出来ますよ。
$s = dllfuncstr( "ExecAtMain", "CurrentFolder" );
です。

 P.S 秀丸メールの会議室は別にあります。
http://www.maruo.co.jp/hidesoft/8/

[ ]
RE:05621 秀丸メールのエディタ上から使用No.05622
緒方聡 さん 07/08/11 14:57
 
Iranoanさん、こんにちは。

> これも ExecAtMain を使えば出来ますよ。
>$s = dllfuncstr( "ExecAtMain", "CurrentFolder" );
>です。

あっ・・・!
そういわれてみれば、まさにそのとおりですね。


> P.S 秀丸メールの会議室は別にあります。
>→http://www.maruo.co.jp/hidesoft/8/

そちらでマクロの質問をしてもよいものかどうか、と思ったのですが、やはりそちら
なんですね。

今後はそちらで質問させていただきます。

[ ]