ウィンドウハンドルからHSPウィンドウIDなら、GWL_USERDATAに入ってるよ。
openHSPのbmscr構造体の生成部分とウィンドウ生成箇所にそんな感じの動きがあったような。
#uselib "user32.dll"
#cfunc GetWindowLong "GetWindowLongA" int,int
#const GWL_USERDATA -21
repeat 16
screen cnt,320,120
mes strf("ウィンドウID[%2d]",cnt)
mes strf("WindowHandle[%8X]",hwnd)
mes strf("GWL_USERDATA[%2d]",GetWindowLong(hwnd,GWL_USERDATA))
loop
ただ、ウィンドウハンドルからHSPウィンドウIDを取得しなきゃならない状況がいまひとつ分からない。