Bypass_PostMessage関数(TKInfo.dll)(Ver7.40対応版)
Bypass_PostMessage関数は、WindowsのPostMessage関数をそのまま呼び出します。この関数を使ってWM_COMMANDをPostすることで、任意のコマンドを実行することが出来ます。
sendmessageを使ってWM_COMMANDを送ると、そのコマンドは「マクロの中から実行された」って扱いになってしまい、普通にコマンド実行した場合とは違う動作になる可能性があります。Bypass_PostMessageを使うとマクロ実行が終わった後に実行させることが出来るので、そういった影響を受けません。
この関数を使ってWM_COMMANDをPostする場合は、その直後に「endmacro」を使うなどして即座にマクロを終了させてください。即座に終了させず何か別の処理をすると、PostしたWM_COMMANDが除去されてしまって何も動作しないか、または他のマクロ命令に変な影響を与える可能性があります。
AutoRestoreFindPack関数呼び出ししてる場合など、マクロ終了と同時に何かアクションを起こす系の指示をしている場合、その指示とBypass_PostMessageによるコマンド実行はどっちが先に実行さるかは判断が難しいです。どっちが先に実行されるか、実際にマクロを作ってテストしてご自身で調べて、順序が常に安定してるようなら、その順序で実行されるつもりでマクロを作成して大丈夫だと思います。
- パラメータ1(数値型)
-
Postする先のウィンドウハンドルです。コマンド実行させたい場合は「hidemaruhandle(0)」を指定して自分自身を指定します。
- パラメータ2(数値型)
-
WM_xxxxのメッセージの値を指定します。WM_COMMANDなら0x111を指定します。
- パラメータ3(数値型)
-
wParamを指定します。WM_COMMANDの場合はコマンドコードを指定します。
- パラメータ4(数値型)
-
lParamを指定します。WM_COMMANDの場合は0を指定します。
- 返り値(数値型)
-
PostMessageの返り値で、普通は無視します。
例 |
loaddll "tkinfo.dll";
#n = dllfunc("Bypass_PostMessage", hidemaruhandle(0), 0x111, 40001, 0);
endmacro; //Bypass_PostMessageの後は即座にマクロを終了させる。
|