HSP 3.6 β3
コールバックルーチン中のwaitが使用できなくなったので、自前でメッセージループを処理してwait相当の処理をするモジュール。
おすすめはしないです。
HSP 3.6 β3
コールバックルーチン中のwaitが使用できなくなったので、自前でメッセージループを処理してwait相当の処理をするモジュール。
おすすめはしないです。
// モジュール開始
#module waithack
#uselib "user32.dll"
#func PeekMessageA "PeekMessageA" sptr,sptr,int,int,int
#func GetMessageA "GetMessageA" sptr,int,int,int
#func TranslateAccelerator "TranslateAcceleratorA" int,int,sptr
#func TranslateMessage "TranslateMessage" sptr
#func DispatchMessageA "DispatchMessageA" sptr
#uselib "kernel32.dll"
#func Sleep "Sleep" int
#uselib "winmm.dll"
#cfunc timeGetTime "timeGetTime"
#undef wait
#deffunc wait int p1, \
local st, local wt, local MSG, local pMsg
dim MSG, 7 : pMsg = varptr(MSG)
wt = p1 * 10
st = timeGetTime()
repeat
;PeekMessageA pMsg, 0, 0, 0, 0 // await的なのならこっちか
;if stat != 0 {
GetMessageA pMsg, 0, 0, 0
if stat == 0 : end
if stat != -1 {
TranslateMessage pMsg
DispatchMessageA pMsg
}
;}
if (timeGetTime() - st) > wt : break
loop
return
#global
// モジュール終了
// 以下サンプル
onclick gosub *jump
stop
*jump
wait 100
mes "aaa"
return