「検索して一覧作成」する前の単語選択No.08800
styth さん 21/11/08 07:59
 
 例えば、「あいうえ」という単語があったとして、

 手動で単語選択しておいて、メール本体で、「検索して一覧作成」を実行します。
 検索したい文字列として、「あいうえ」が表示されています。

 次に、メール本体で「あいうえ」の「い」と「う」の間にカーソルをおいて(カー
ソルの点滅は見えないですが)、末尾のマクロAを実行します。
 検索したい文字列が、何も表示されません。
 単語は反転表示されています。

 マクロAを実行した時に、検索したい文字列として、「あいうえ」が表示されるよ
うにしたいのですが、
マクロをどう直せば良いでしょうか?

//マクロA
selectword;
loaddll "tkinfo.dll";
#n = sendmessage( hidemaruhandle(0), 0x0111, 40066, 0);

[ ]
RE:08800 「検索して一覧作成」する前の単No.08802
秀まるお2 さん 21/11/08 09:08
 
 カーソル位置の単語を自動で取り込む処理は、マクロ実行中の場合はあえてしない
ようにしてるみたいです。

 とりあえず以下のマクロならちゃんと単語を取り込むようです。それでどうでしょ
うか。

    //マクロA
    selectword;
    loaddll "tkinfo.dll";
    #n = dllfunc("Bypass_PostMessage", hidemaruhandle(0), 0x0111, 40066, 0);

[ ]
RE:08802 「検索して一覧作成」する前の単No.08804
styth さん 21/11/08 09:42
 
> カーソル位置の単語を自動で取り込む処理は、マクロ実行中の場合はあえてしな
>いようにしてるみたいです。
> とりあえず以下のマクロならちゃんと単語を取り込むようです。それでどうでし
>ょうか。
 ありがとうございます。うまくいきました。
 ところで、メールエディタ上で、selectwordして、メール本体で、grepしよう
と以下のマクロにしましたが、単語が取り込めません。
 そういったことは、可能でしょうか?

    //マクロA
    selectword;
    loaddll "tkinfo.dll";
    #main = dllfunc( "SetMainWndTop" );
    #n = dllfunc("Bypass_PostMessage", hidemaruhandle(0), 0x0111, 40066, 0);

[ ]
RE:08804 「検索して一覧作成」する前の単No.08805
秀まるお2 さん 21/11/08 10:40
 
 ソースコードのトレースなどして調べてみたんですが、「検索して一覧作成」のダ
イアログボックスの初期で出てくる内容をマクロでなんとかコントロールする手段は
無さそうでした。

 マクロでなんとかするとしたら、検索の処理もマクロでなんとかするような形にな
ります。

    loaddll "tkinfo.dll";
    selectword;
    $text = gettext( seltopx, seltopy, selendx, selendy );
    if( $text == "" ) {
        message "選択文字列なし";
        endmacro;
    }
    #n = dllfunc("SetMainWndTop");
    #n = dllfunc("SetFindPack", "(\"" + dllfuncstr("YenEncode", $text) + "\",
 target=smallheaderbody)");
    #n = dllfunc("StartDoGrep", "", "");

 こんな感じでどうでしょうか。SetFindPackやStartDoGrepのパラメータはヘルプを
参照して適当にアレンジして使ってほしいです。

[ ]
RE:08805 「検索して一覧作成」する前の単No.08812
styth さん 21/11/09 07:27
 
>    #n = dllfunc("StartDoGrep", "", "");
> こんな感じでどうでしょうか。SetFindPackやStartDoGrepのパラメータはヘルプ
>を参照して適当にアレンジして使ってほしいです。
 ありがとうございます。一応、できました。
 ところで、

 #n = dllfunc("StartDoGrep", "アカウント名", "user\\フォルダ名");
 とすると、エラーになりました。
 #n = dllfunc("StartDoGrep", "アカウント名", "User\\フォルダ名");
 だと、大丈夫です。

 どちらでも、OKというわけには行かないでしょうか?
 (暫くすると、忘れてしまって悩みますので。)

[ ]
RE:08812 「検索して一覧作成」する前の単No.08815
秀まるお2 さん 21/11/09 09:21
 
>  どちらでも、OKというわけには行かないでしょうか?

 あんまり細かいことでいろいろ対応するのも、僕の等でいろいろテストしないとい
けなくて大変だし、修正ミスで逆に変なバグを出してしまったりする可能性もあるの
で、あんまりいじりたくない所です。

 基本的に、コンピュータ言語のプログラミングで大文字/小文字の区別を間違えて
うまく動かないようなことは多々あるので、その辺は注意して書いてもらった方が将
来的にもいいんしゃないかと思います。

[ ]
RE:08815 「検索して一覧作成」する前の単No.08819
styth さん 21/11/10 07:10
 
> あんまり細かいことでいろいろ対応するのも、僕の等でいろいろテストしないと
>いけなくて大変だし、修正ミスで逆に変なバグを出してしまったりする可能性もあ
>るので、あんまりいじりたくない所です。
 承知しました。

[ ]
RE:08805 「検索して一覧作成」する前の単No.08862
styth さん 21/11/18 08:21
 
 教えて頂いたマクロを秀丸エディタと同じショートカットキーで実行しようとしま
した。
 以下のようなマクロなんですが、

message $text; //(ア)
 を表示後、マクロが終わってしまいます。
 メッセージの中身は意図したものです。

 これをコメントにすると、$textがGREPの検索文字列に取り込めません。
 どこを直せば良いんでしょうか?
 (ア)をコメントにして、(イ)のコメントを外すと、取り込めます。
 メールエディタの方は、$textが取り込めています。
 (何か勘違いしていたら、すみません)

if ( ! selecting ) selectword;
$text = gettext( seltopx, seltopy, selendx, selendy );

loaddll @"C:\Program Files (x86)\HidemaruMail\tkinfo.dll";
if ( platform & 0x800000 ) { //秀丸メール
 if( dllfunc( "IsHidemaruMailMain") ) {
  //message $text; //(ア)
  //selectword;  //(イ)
  #main = dllfunc( "SetMainWndTop" );
  #n = dllfunc("Bypass_PostMessage", hidemaruhandle(0), 0x0111, 40066, 0);
 }
 else {
  //selectword;
  if( $text == "" ) {
   message "選択文字列なし";
   endmacro;
  }
  question "「秀丸メール」 のGREPを実行しますか?\n\n検索ワード= "+ $text;
  if ( ! result ) endmacro;
 
  #n = dllfunc("SetMainWndTop");
  #n = dllfunc("SetFindPack", "(\"" + dllfuncstr("YenEncode", $text) + "\",
target=smallheaderbody)");
  #n = dllfunc("StartDoGrep", "アカウント名", "User\\フォルダ");
 }
}
else { //秀丸エディタ}
 以下、略


[ ]
RE:08862 「検索して一覧作成」する前の単No.08864
秀まるお2 さん 21/11/18 09:25
 
 エディタ・ウィンドウ上でも秀丸メール本体ウィンドウ上でも、とにかく選択して
る文字列を対象に「検索して一覧作成」を実行できればいいのであれば、特に「IsHi
demaruMailMain」で判定して別処理をする必要は無いように思います。


if ( ! selecting ) selectword;
$text = gettext( seltopx, seltopy, selendx, selendy );

if ( platform & 0x800000 ) { //秀丸メール
  loaddll "tkinfo.dll";
  //selectword;
  if( $text == "" ) {
   message "選択文字列なし";
   endmacro;
  }
  question "「秀丸メール」 のGREPを実行しますか?\n\n検索ワード= "+ $text;
  if ( ! result ) endmacro;
 
  #n = dllfunc("SetMainWndTop");
  #n = dllfunc("SetFindPack", "(\"" + dllfuncstr("YenEncode", $text) + "\",
target=smallheaderbody)");
  #n = dllfunc("StartDoGrep", "", "");  //実際にはアカウント名とフォルダ名を
ここに書く?
}
else { //秀丸エディタ}
// 以下、略
}

[ ]
RE:08864 「検索して一覧作成」する前の単No.08866
styth さん 21/11/18 09:37
 
> エディタ・ウィンドウ上でも秀丸メール本体ウィンドウ上でも、とにかく選択し
>てる文字列を対象に「検索して一覧作成」を実行できればいいのであれば、特に「I
>sHidemaruMailMain」で判定して別処理をする必要は無いように思います。
 本当は、エディタ・ウィンドウ上でも秀丸メール本体ウィンドウ上でも、「検
索して一覧作成」ダイアログを出したいのですが、エディタ・ウィンドウ上では
無理だということで分けました。

>  question "「秀丸メール」 のGREPを実行しますか?\n\n検索ワード= "+ $text;
 としているのは、メールエディタ・ウィンドウか秀丸エディタかが、良く分かるよ
うにするためです。

 なので、とにかく選択してる文字列を対象に「検索して一覧作成」を実行でき
ればいい、ということではありません。
 「検索して一覧作成」ダイアログを表示した上で、色々変えたいです。(とい
う思いがあります。)
 よろしくお願いいたします。

[ ]
RE:08866 「検索して一覧作成」する前の単No.08867
秀まるお2 さん 21/11/18 09:54
 
 「検索して一覧作成」のダイアログボックスをマクロから出すことは出来ますが、
そこの

    検索(S):[___________________]

 に初期値として出てくる内容をマクロから任意にコントロールすることは現状でき
ません。

 範囲選択して実行すれば、その選択した文字列が取り込まれるというのはあるので、
その仕組みを使ってコントロールすることいいかもしれないですけども。その作戦で
いくとしたら、gettextで範囲選択を解除しないようにすればいいと思います。


    if ( ! selecting ) selectword;
    $text = gettext( seltopx, seltopy, selendx, selendy, 1 );
    if ( platform & 0x800000 ) { //秀丸メール
        loaddll "tkinfo.dll";
        if( dllfunc("IsHidemaruMailMain") ) {
            #n = dllfunc("Bypass_PostMessage", hidemaruhandle(0), 0x0111, 40
066, 0);
        } else {
            //selectword;
            if( $text == "" ) {
                message "選択文字列なし";
                endmacro;
            }
            question "「秀丸メール」 のGREPを実行しますか?\n\n検索ワード=
 "+ $text;
            if ( ! result ) endmacro;
            #n = dllfunc("SetMainWndTop");
            #n = dllfunc("SetFindPack", "(\"" + dllfuncstr("YenEncode", $tex
t) + "\", target=smallheaderbody)");
            #n = dllfunc("StartDoGrep", "", "");      //実際にはアカウント名
とフォルダ名をここに書く?
        }
    }
    else { //秀丸エディタ}
        // 以下、略
    }

[ ]
RE:08867 「検索して一覧作成」する前の単No.08868
styth さん 21/11/18 10:27
 
> 範囲選択して実行すれば、その選択した文字列が取り込まれるというのはあるの
>で、その仕組みを使ってコントロールすることいいかもしれないですけども。その
>作戦でいくとしたら、gettextで範囲選択を解除しないようにすればいいと思います。
 ありがとうございます。出来ました。

 本題とは、関係なくなりましたが、
message $text; //(ア)
#n = dllfunc("Bypass_PostMessage", hidemaruhandle(0), 0x0111, 40066, 0);
 とすると、メッセージ表示後、マクロが終わる、という疑問は残ります。

[ ]