【要望】秀丸メール - 検索起動オプションNo.39569
ダヴィンチ1958 さん 10/11/18 20:19
 
秀まるお様
いつもお世話になっております。
ダヴィンチです。

外部アプリケーションから秀丸メールを起動して、該当するメールの内容表示や
メール一覧の該当位置にカーソルを移動させたいです。
そこで起動オプションの追加要望があります。

■要望内容
追加オプション:find、edit=ON/OFF、log=filename
使用例:turukame.exe find edit=ON log=filename account=XXX folder=XXXX FindP
ack文字列…

秀丸メールの起動オプションでfindの後に指定したパラメータで
メールを検索して、該当するメールがあればedit=ONのときは、
メールエディタで内容を表示、edit=OFFであればメール一覧の
該当メールにカーソルを移動させます。
もし検索で複数のメールに該当する場合は、エラー情報を
logで指定したファイルに出力するようにして欲しいです。

本件が実現できた暁にはマクロライブラリーに
「【秀丸メール受信ポップアップ通知機能2010】」を
投稿させて頂く予定です。
※)まだアプリの開発は始めたばかりですが・・・

お忙しいところ申し訳ありませんが、なにとぞ
ご対応を宜しくお願い致します。

[ ]
RE:39569 【要望】秀丸メール - 検索起動No.39573
秀まるお2 さん 10/11/19 09:50
 
 秀丸メール起動時のコマンドラインで検索関係の機能対応するのはアリかと思
いますが、今回のケース(特定アプリから呼び出す)用ということでしたら、コ
マンドラインからマクロ起動するやり方で実現出来ると思います。

 マクロで実現した方が柔軟性も拡張性も高いです。

 具体的には、マクロの内容としては、

    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    $home = dllfuncstr("HomeDir");
    $ini = $home + "TestMacroIni.ini";
    closereg;

    #edit = getininum( $ini, "Data", "edit");
    $account = getinistr( $ini, "Data", "account" );
    $folder = getinistr( $ini, "Data", "folder" );
    $pack = getinistr( $ini, "Data", "pack" );

    writeinistr $ini, "Error", "Error", "";

    loaddll "tkinfo.dll";
    #n = dllfunc("SetFindPack", $pack );
    if( #n == 0 ) {
        writeinistr $ini, "Error", "Error", "FindPackエラー";
        endmacro;
    }
    #n = dllfunc("SelectFolder", $acount, $folder );
    ...
    ..


 みたいな感じで検索実行するような処理を書くということで…

 後でまたマクロ内容は追加書き込みします。

[ ]
RE:39573 【要望】秀丸メール - 検索起動No.39575
秀まるお2 さん 10/11/19 10:53
 
 マクロ作ってみました。

 秀丸メール起動時コマンドラインで、「/x マクロ名」って形でマクロ実行さ
せたらいいと思います。

 呼び出す側のプログラムとしては、

 1.レジストリを見て秀丸メールのホームディレクトリを取り出し、
   それを元にiniファイルのパスを作成する。

 2.iniファイルに各種情報を書き込む。

 3.秀丸メールがまだ起動してない場合はturukame.exe起動の処理をして、
   ウィンドウが出てくるまで待つような処理をする。
   ウィンドウは、クラス名"TuruKameFrame"でFindWindowすればいいです。

 4.turukame.exe /x ".....\\....\\test.mac"みたいな感じでマクロ起動
   する。(マクロファイル名はフルパス指定で)
   その後プロセスが終了するのを待つ。

   C++言語の場合なら、CreateProcessしてからPROCESS_INFORMATION中の
   hProcessをMsgWaitForMultipleObjectsでウェイトする、あるいは
   タイマーを使ってhProcessを監視するのが普通かと思います。

 5.秀丸メールのプロセスが終了したら、iniファイル中の"Error="部分を
   見る。

 ってな具合でいけると思います。

------------------サンプルマクロ------------------------

    loaddll "tkinfo.dll";
    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    $home = dllfuncstr("HomeDir");
    $ini = $home + "TestMacroIni.ini";
    closereg;

    #edit = getininum( $ini, "Data", "edit");
    $account = getinistr( $ini, "Data", "account" );
    $folder = getinistr( $ini, "Data", "folder" );
    $pack = getinistr( $ini, "Data", "pack" );

    writeinistr $ini, "Error", "Error", "";

    if( $account == "" ) {
        #n = dllfunc("SelectFolder", dllfuncstr("Account",0),"");
        $pack = $pack + ", subfolder=1, inmail=3";
    } else if( $folder == "" ) {
        #n = dllfunc("SelectFolder", $account, "" );
        $pack = $pack + ", subfolder=1, inmail=2";
    } else {
        #n = dllfunc("SelectFolder", $account, $folder );
        if( #n != 0 ) {
            #n = dllfunc("SetViewArea", 0 );
            #n = dllfunc("SelectPane", 1 );
            #n = dllfunc("SimulateKeyStroke", 0x24, 0, 0, 0 );
        }
        $pack = $pack + ", subfolder=0, inmail=0";
    }
    if( #n == 0 ) {
        message "フォルダ選択に失敗しました。";
        writeinistr $ini, "Error", "Error", "フォルダ選択に失敗しました。";
        endmacro;
    }
    #n = dllfunc("SetFindPack", $pack );
    if( #n == 0 ) {
        message "FindPackエラー";
        writeinistr $ini, "Error", "Error", "FindPackエラー";
        endmacro;
    }
    #n = dllfunc("FindDownInclude");
    if( #n == 0 ) {
        message "見つかりません。";
        writeinistr $ini, "Error", "Error", "Not found";
        endmacro;
    }
    if( #edit != 0 ) {
        #n = dllfunc("OpenMail");
    }
    writeinistr $ini, "Error", "Error", "OK";
    endmacro;

[ ]
RE:39575 【要望】秀丸メール - 検索起動No.39580
ダヴィンチ1958 さん 10/11/19 23:59
 

2010/11/19(金) 23:40:21

こんにちは、秀まるお2さん

ダヴィンチ@ユーザーです。

お忙しいなか早速のご回答ありがとうございます。
確かにマクロで検索を行った方がいろいろ拡張もしやすいという
メリットがありますので、今回はこれで行こうと思います。
またマクロまで作って頂いて申し訳ありません。
助かります。

私が考えていた仕組みは、新着メールを受信した事を自動受信マクロが
受けてから専用のアプリを起動して新着メールのタイトルや送信者などを
グリッドで表示させます。
グリッド上で見たいメールをクリックしてメールを読むという仕組みです。
受信マクロ=>メール一覧表示アプリ(常駐)=>秀丸メール起動オプションで
該当メールを検索・表示というものです。
メール検索でまたマクロを使うのはシステムとして複雑になるので
避けたかったので秀丸メール側のオプション追加の要望を出させて
頂きました。

秀丸メールの今後の発展に期待しております。
いろいろ無理を申しあげてすみませんでした。

また困った事があれば、助けて下さい。
では。

/*
** タイトル:『hidesoft.8:39575| RE 39573 【要望】秀丸メール - 検索起動オ
プション』
** 発信日:2010年11月19日(金) 10:53:35
** 発信者:秀まるお2さん
*/
> マクロ作ってみました。
>
> 秀丸メール起動時コマンドラインで、「/x マクロ名」って形でマクロ実行さ
>せたらいいと思います。
>
> 呼び出す側のプログラムとしては、
>
> 1.レジストリを見て秀丸メールのホームディレクトリを取り出し、
>   それを元にiniファイルのパスを作成する。
>
> 2.iniファイルに各種情報を書き込む。
>
> 3.秀丸メールがまだ起動してない場合はturukame.exe起動の処理をして、
>   ウィンドウが出てくるまで待つような処理をする。
>   ウィンドウは、クラス名"TuruKameFrame"でFindWindowすればいいです。
>
> 4.turukame.exe /x ".....\\....\\test.mac"みたいな感じでマクロ起動
>   する。(マクロファイル名はフルパス指定で)
>   その後プロセスが終了するのを待つ。
>
>   C++言語の場合なら、CreateProcessしてからPROCESS_INFORMATION中の
>   hProcessをMsgWaitForMultipleObjectsでウェイトする、あるいは
>   タイマーを使ってhProcessを監視するのが普通かと思います。
>
> 5.秀丸メールのプロセスが終了したら、iniファイル中の"Error="部分を
>   見る。
>
> ってな具合でいけると思います。
>
>------------------サンプルマクロ------------------------
>
>    loaddll "tkinfo.dll";
>    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
>    $home = dllfuncstr("HomeDir");
>    $ini = $home + "TestMacroIni.ini";
>    closereg;
>
>    #edit = getininum( $ini, "Data", "edit");
>    $account = getinistr( $ini, "Data", "account" );
>    $folder = getinistr( $ini, "Data", "folder" );
>    $pack = getinistr( $ini, "Data", "pack" );
>
>    writeinistr $ini, "Error", "Error", "";
>
>    if( $account == "" ) {
>        #n = dllfunc("SelectFolder", dllfuncstr("Account",0),"");
>        $pack = $pack + ", subfolder=1, inmail=3";
>    } else if( $folder == "" ) {
>        #n = dllfunc("SelectFolder", $account, "" );
>        $pack = $pack + ", subfolder=1, inmail=2";
>    } else {
>        #n = dllfunc("SelectFolder", $account, $folder );
>        if( #n != 0 ) {
>            #n = dllfunc("SetViewArea", 0 );
>            #n = dllfunc("SelectPane", 1 );
>            #n = dllfunc("SimulateKeyStroke", 0x24, 0, 0, 0 );
>        }
>        $pack = $pack + ", subfolder=0, inmail=0";
>    }
>    if( #n == 0 ) {
>        message "フォルダ選択に失敗しました。";
>        writeinistr $ini, "Error", "Error", "フォルダ選択に失敗しました。";
>        endmacro;
>    }
>    #n = dllfunc("SetFindPack", $pack );
>    if( #n == 0 ) {
>        message "FindPackエラー";
>        writeinistr $ini, "Error", "Error", "FindPackエラー";
>        endmacro;
>    }
>    #n = dllfunc("FindDownInclude");
>    if( #n == 0 ) {
>        message "見つかりません。";
>        writeinistr $ini, "Error", "Error", "Not found";
>        endmacro;
>    }
>    if( #edit != 0 ) {
>        #n = dllfunc("OpenMail");
>    }
>    writeinistr $ini, "Error", "Error", "OK";
>    endmacro;

[ ]