English help on website



マクロ実行するメッセージ(Ver9.35対応版)
目次DLL側から秀丸エディタの関数呼び出し− マクロ実行するメッセージ
外部からマクロ実行するメッセージあります。

秀丸エディタのウィンドウハンドルに対して、SendMessageでメッセージを送ってマクロ実行できます。
秀丸エディタのウィンドウハンドルは、hidemaruhandle(n)で得られるウィンドウハンドルで、自分自身はhidemaruhandle(0)で得ることができます。
Hidemaru_GetCurrentWindowHandle関数で得ることもできます。


メッセージは以下の値を指定します。
#define WM_ISMACROEXECUTING (WM_USER + 167)
#define WM_REMOTE_EXECMACRO_FILE (WM_USER + 271)
#define WM_REMOTE_EXECMACRO_MEMORY (WM_USER + 272)
#define WM_REMOTE_EVALMACRO (WM_USER + 282)

WM_ISMACROEXECUTING(V8.75以降)
現在マクロ実行中であるかどうかを返します。
自分自身の秀丸エディタではなく、別の秀丸エディタ上でマクロ実行されている場合でも実行中と判断されます。
0は実行されていません。
0以外は実行されています。
参考:
hidemaru.isMacroExecuting

WM_REMOTE_EXECMACRO_FILE(V8.75以降)
ファイル名を指定してマクロを実行します。
マクロ実行中は、メッセージによるマクロ実行はできません。
(マクロの中から自作DLLをdllfuncで呼んで、その中でSendMessageしてWM_REMOTE_EXECMACRO_FILEやWM_REMOTE_EXECMACRO_MEMORYを呼ぶことはできない)

lParamにはマクロファイル名の文字列へのポインタをUnicodeで指定します。
wParamはendmacroで文字列を指定して終了するとき、それを受け取るバッファのポインタを指定します。0を指定して省略可能です。メッセージを送る前には、バッファ先頭のWORD値(2バイト)は、バッファの大きさを指定します。メッセージから応答すると、バッファは上書きされます。
返り値は、成功時に1、マクロ実行中は失敗して0が返ります。
ポインタは、秀丸エディタ内のプロセスで有効なアドレスを指している必要があります。

例(C++)
#define WM_REMOTE_EXECMACRO_FILE (WM_USER + 271)
WCHAR wszReturn[100]; *(WORD*)wszReturn = sizeof(wszReturn)/sizeof(wszReturn[0]); LRESULT lRet = SendMessage( hwndHidemaru, WM_REMOTE_EXECMACRO_FILE, (WPARAM)wszReturn, (LPARAM)L"c:\\folder\\test.mac" ); if( lRet == 1 ) { MessageBoxW( hwndOwner, wszReturn, 0, MB_OK ); }

参考:
/xオプション(秀丸エディタの起動オプションのヘルプ)
hidemaru.postExecMacroFile

WM_REMOTE_EXECMACRO_MEMORY(V8.75以降)
マクロの内容をテキストで渡してマクロを実行します。
マクロ実行中は、メッセージによるマクロ実行はできません。
(マクロの中から自作DLLをdllfuncで呼んで、その中でSendMessageしてWM_REMOTE_EXECMACRO_FILEやWM_REMOTE_EXECMACRO_MEMORYを呼ぶことはできない)

lParamにはマクロの内容へのポインタをUnicodeで指定します。
wParamと返り値はWM_REMOTE_EXECMACRO_FILEと同じです。
例(C++)
#define WM_REMOTE_EXECMACRO_MEMORY (WM_USER + 272)
WCHAR wszReturn[100]; *(WORD*)wszReturn = sizeof(wszReturn)/sizeof(wszReturn[0]); LRESULT lRet = SendMessage( hwndHidemaru, WM_REMOTE_EXECMACRO_MEMORY, (WPARAM)wszReturn, (LPARAM)L"message \"TEST MESSAGE\";endmacro \"TEST RETURN\";" ); if( lRet == 1 ) { MessageBoxW( hwndOwner, wszReturn, 0, MB_OK ); }

参考:
hidemaru.postExecMacroMemory

WM_REMOTE_EVALMACRO(V8.90以降)
Hidemaru_EvalMacroと同じ効果のある方法でマクロ実行をします。
マクロ実行中でも実行でき、dllfuncで呼び出されたDLLの中から呼び出すことができます。
マクロ実行中でないときは使えません。

wParamは0を指定します。
lParamにはマクロの内容へのポインタをUnicodeで指定します。
返り値は、成功時に1、失敗時は0が返ります。
例(C++)
#define WM_REMOTE_EVALMACRO (WM_USER + 282)
LRESULT lRet = SendMessage( hwndHidemaru, WM_REMOTE_EVALMACRO, 0, (LPARAM)L"message \"TEST MESSAGE\";" );

参考:
eval
WM_REMOTE_EVALMACRO
Hidemaru_EvalMacro
hidemaru.evalMacro