情報取得のメッセージ(Ver8.91対応版)
目次DLL側から秀丸エディタの関数呼び出し− 情報取得のメッセージ
秀丸エディタの各種情報を取得するためのメッセージがあります。

秀丸エディタのウィンドウハンドルに対して、SendMessageにてWM_HIDEMARUINFOメッセージとパラメータを呼び出すと、適当な値が返ってきます。
秀丸エディタのウィンドウハンドルは、hidemaruhandle(n)で得られるウィンドウハンドルで、自分自身はhidemaruhandle(0)で得ることができます。
Hidemaru_GetCurrentWindowHandle関数で得ることもできます。

メッセージは以下の値を指定します。
#define WM_HIDEMARUINFO (WM_USER + 181)

WPARAMは以下の値を指定します。
#define HIDEMARUINFO_GETTABWIDTH 0
#define HIDEMARUINFO_GETSTARTCOLUMN 1
#define HIDEMARUINFO_GETSPACETAB 2
#define HIDEMARUINFO_GETMANUALTAB 3
#define HIDEMARUINFO_GETFILEFULLPATH 4

LPARAMは呼び方によって意味が変わります。


HIDEMARUINFO_GETTABWIDTH
int n = SendMessage( hwndHidemaru, WM_HIDEMARUINFO, HIDEMARUINFO_GETTABWIDTH, 0 );

タブ文字の表示上の桁数を返します。2,4,8または設定された値になります。
TSVモードや自由配置モードのときはHIDEMARUINFO_GETMANUALTABを使います。

HIDEMARUINFO_GETSTARTCOLUMN
int x = SendMessage( hwndHidemaru, WM_HIDEMARUINFO, HIDEMARUINFO_GETSTARTCOLUMN, 0 );

範囲選択されてる先頭位置の桁の座標を返します。タブ文字を空白に変換したり、その逆をするのに必要です。

HIDEMARUINFO_GETSPACETAB
int f = SendMessage( hwndHidemaru, WM_HIDEMARUINFO, HIDEMARUINFO_GETSPACETAB, 0 );

タブキーを押した時にタブ文字を入力するのか、その桁数相当の空白を入力するモードなのかを返します。
空白を入力するモードなら1を返します。そうでないときは0を返します。

HIDEMARUINFO_GETMANUALTAB (V8.00以降)
int mode = SendMessage( hwndHidemaru, WM_HIDEMARUINFO, HIDEMARUINFO_GETMANUALTAB, lParam );

TSVモードや自由配置モードのときのタブ位置を取得します。
lParamはMANUALTABSTRUCT構造体へのポインタを指定します。
struct MANUALTABSTRUCT {
    UINT cb;    //in, out
    WORD* pw;   //in, out
};

呼ぶ前にMANUALTABSTRUCT構造体にWORD配列のポインタpwとバッファサイズcbとを指定します。

//呼び方の例
MANUALTABSTRUCT ms;
WORD aw[8192];
ms.cb = sizeof(aw);
ms.pw = (WORD*)aw;
int mode = SendMessage( hwndHidemaru, WM_HIDEMARUINFO, HIDEMARUINFO_GETMANUALTAB, (LPARAM)&ms );

返り値が0のときは自由配置ではありません。HIDEMARUINFO_GETTABWIDTHで2,4,8などの固定の値を取得します。
返り値が0以外のときは、MANUALTABSTRUCT構造体にタブ位置が格納されます。
pwがタブ位置のWORD配列で、cb/sizeof(WORD)が配列の要素数です。
返り値1は自由配置モード、2はTSVモード、3はCSVモードです。

HIDEMARUINFO_GETFILEFULLPATH (V8.66以降)
int cwch = SendMessage( hwndHidemaru, WM_HIDEMARUINFO, HIDEMARUINFO_GETFILEFULLPATH, lParam );

現在開いているファイルのファイル名をフルパスで返します。
lParamには返される文字列のポインタを指定します。
あらかじめファイル名が格納可能なUnicodeで260文字分のメモリが確保されている必要があります。
//呼び方の例
WCHAR wsz[MAX_PATH];
int cwch = SendMessage( hwndHidemaru, WM_HIDEMARUINFO, HIDEMARUINFO_GETFILEFULLPATH, (LPARAM)wsz );
返り値には文字数が返ります。
lParamに0を指定して呼び出すと、文字数だけを返します。