More ... | HSP3のテクニック他HSP3 のちょっと知られていないテクニックなどです。
oncmd 割込みには事前処理と事後処理とがあるらしい( 非公式 )事前処理とはHSPがメッセージを処理する前に指定したラベルへ割込みが発生する処理のことで、 oncmd gosub にあたる。 #define MODE 0 ; 0=事後/1=事前
#if MODE
oncmd gosub *OnCommand, $0111 ; 本来の処理に先駆けて『事前』に割込みを発生する
#else
oncmd goto *OnCommand, $0111 ; 本来の処理を行った『後』に割込みを発生する
#endif
chkbox "hello",n
*watch
wait 1: title "現在値 = "+n: goto *watch
stop
*OnCommand
mes "割込み発生時 = "+n
#if MODE
return
#else
goto *watch
#endif
DLL 関数のアドレス取得実は varptr 関数で変数と同様に DLL 関数のアドレス(ポインタ)を取得できます。 #uselib "user32.dll"
#func MessageBox "MessageBoxA" int, sptr, sptr, int
func = varptr(MessageBox) ; 関数のアドレス取得
mes strf("%08x", func) ; アドレス表示(16進数)
buf = "テスト"
prm = hwnd, varptr(buf), varptr(buf), 0
mes callfunc(prm, func, 4) ; 関数実行
stop
|