updatecountをDLLから取得したいNo.09756
ohtorii さん 22/03/05 18:23
 
お疲れ様です。

updatecountをDLLから取得したいです、しかし、現状では手段が見つかりませんでし
た・・・
何か良い手段がないでしょうか?

■試したこと
*Hidemaru_EvalMacro関数
 マクロ実行後の返値(文字列)を取得する方法が無い。
 やりたいこと(int値の取得)に対して処理が大げさ。

*SendMessage関数
 WPARAMにupdatecountが無いため利用できない。



↓私が考えた案

■SendMessageの引数追加
#define HIDEMARUINFO_GETUPDATECOUNT 5
int updatecount = SendMessage( hwndHidemaru, WM_HIDEMARUINFO, HIDEMARUINFO_G
ETUPDATECOUNT, 0 );


■関数を追加
enum Hidemaru_Status{
    OVERWRITE=0,    //←各種状態関連キーワードです
    UPDATED,
    UPDATECOUNT,
}
//状態を取得する関数
int updatecount = Hidemaru_GetStatus(UPDATECOUNT);

(備考)
以下のように関数を増やすとC#から利用する時に面倒です(ToT)
int Hidemaru_GetStatusOverwrite()
int Hidemaru_GetStatusUpdated()
int Hidemaru_GetStatusUpdatecount()
   
(環境)
秀丸エディタ 9.12 beta 11

よろしくお願いいたします。

[ ]
RE:09756 updatecountをDLLから取得したいNo.09757
秀丸担当 さん 22/03/07 09:17
 
updatecountのDLLからの取得は、確かに面倒かもしれません。
より簡便にできたらいいと思います。
SendMessageのパラメータを増やす方式でやってみます。
wParamの5と6は実は既に内部的に使っていて、値は7にして、返り値は少なくとも0で
はない値を返すようにしてみます。

[ ]
RE:09757 updatecountをDLLから取得したいNo.09758
ohtorii さん 22/03/07 17:54
 
ご対応ありがとうございます、楽しみしています。

[ ]
RE:09757 updatecountをDLLから取得したいNo.09759
ohtorii さん 22/03/08 12:14
 
お疲れ様です。
追加で質問とお願いがあります、


【質問】
updatecountを利用する時は大抵以下の処理パターンになるかと思います、

> current=updatecount;
> if(prev != current){
>     テキストが編集されたので、ユーザー独自の処理をここで行う
>    
>     //次回に備える
>     prev = current;
> }else{
>     テキストは編集されていないため何もしない
> }

このとき、prev変数の初期値をどんな値にすれば良いかで困っています。
(多分prev=0で良いと思いますが、updatecountの説明で明示されていなくて・・・)



【お願い】
私が調べた範囲では、新規作成直後(メニュ→ファイル→新規作成)はupdatecount==4
でした。
なので、"秀丸エディタマクロヘルプ"に
> "updatecountの初期値は1以上です"
という文言があるだけでも、ありがたいです。


よろしくお願いいたします。

[ ]
RE:09759 updatecountをDLLから取得したいNo.09760
秀丸担当 さん 22/03/08 12:58
 
updatecountは、メッセージ対応をするにあたって、必ず0以外の値になるようにしよ
うとしていたところでしたが、調べてみたらご指摘の通り、起動しただけで4となり、
既に0以外でした。
仕様としても必ず0以外となると書いておくようにします。

[ ]