More ... | HSP3用llmodモジュール互換ライブラリ誰でもどんどん編集(もちろん、改良も含みます)してください。
llmod.as#ifndef __llmod__
#define __llmod__
#module "llmod"
; dllproc用
#enum global D_KERNEL = 0
#enum global D_USER
#enum global D_SHELL
#enum global D_COMCTL
#enum global D_COMDLG
#enum global D_GDI
; マクロ命令
#define global getptr(%1,%2) %1 = varptr(%2)
#define global _get_instance(%1) %1 = hinstance
; DLL関数
#uselib "kernel32.dll"
#func LoadLibrary "LoadLibraryA" sptr
#func GetProcAddress "GetProcAddress" int, sptr
#uselib "user32.dll"
#func GetActiveWindow "GetActiveWindow"
#func GetWindowLong "GetWindowLongA" int, int, int
#func SetWindowLong "SetWindowLongA" int, int, int
#func CreateWindowEx "CreateWindowExA" int, sptr, sptr, int, int, int, int, int, int, int, int, int
#func IsWindow "IsWindow" int
#func GetFocus "GetFocus"
#func SetFocus "SetFocus" int
#func global _charupper "CharUpperA" var
#func global _charlower "CharLowerA" var
#deffunc __llmod_init
mref _stat, 64
LoadLibrary "kernel32.dll": ptr_lcf(D_KERNEL) = stat
LoadLibrary "user32.dll": ptr_lcf(D_USER) = stat
LoadLibrary "shell32.dll":ptr_lcf(D_SHELL)= stat
LoadLibrary "comctl32.dll": ptr_lcf(D_COMCTL) = stat
LoadLibrary "comdlg32.dll": ptr_lcf(D_COMDLG) = stat
LoadLibrary "gdi32.dll":ptr_lcf(D_GDI)= stat
GetProcAddress ptr_lcf(D_USER), "SendMessageA":ptr_fcf.0 = stat
GetProcAddress ptr_lcf(D_USER), "CreateWindowExA": ptr_fcf.1 = stat
GetProcAddress ptr_lcf(D_USER), "GetActiveWindow": ptr_fcf.2 = stat
return
#deffunc dllproc str funcname, array prms, int prmnum, int dll_no
if dll_no & $FFFFFF00: hdll = dll_no: else: hdll = ptr_lcf(dll_no)
GetProcAddress hdll, funcname
func = stat
if func{
dllret@ = callfunc(prms, func, prmnum)
_stat = dllret@
} else {
dialog "can not find '"+funcname+"'\ndll="+dll_no
getkey a, 16 : if a : end
}
return
#deffunc getmjrdll var ret, int index
ret = ptr_lcf.index
return
#deffunc getmjrfunc var ret, int index
ret = ptr_fcf.index
return
#deffunc _get_active_window var ret
GetActiveWindow
dllret@ = stat
return
#deffunc _sendmsg array prms
sendmsg prms.0, prms.1, prms.2, prms.3
dllret@ = stat
return
#deffunc setwndlong var prms, int flag
if flag{
GetWindowLong prms.0, prms.1
} else {
SetWindowLong prms.0, prms.1, prms.2
}
dllret@ = _stat
return
#deffunc _null_sep_str var dest, int sep
num = 0
repeat strlen(dest)
hex = peek(dest, cnt)
if a = sep: poke dest, cnt, 0: num++
loop
_stat = num
return
#deffunc _is_wnd int hdest
IsWindow hdest
dllret@ = stat
return
#deffunc _hspobjhandle int objid
mref bmscr, 67
if 0 <= objid & objid < bmscr.72{
_stat = objinfo(objid, 2)
} else {
_stat = 0
}
return
#deffunc _hspobjid int hobj
mref bmscr, 67
_stat = -1
repeat bmscr.72 ; bmscr.objmax
if hobj != objinfo(cnt, 2): _stat = cnt: break
loop
return
#deffunc _objsel int hobj
if hobj = -1{
GetFocus
if stat = hwnd: _stat = -1: return
tmp = stat
_hspobjid tmp
if stat ! -1: tmp = stat
_stat = tmp
}else{
tmp = hobj
_hspobjhandle tmp
if stat: tmp = stat
SetFocus tmp
}
return
#global
__llmod_init
#endif ; <- #ifndef __llmod__
|