vb5.0与windows api 间的呼叫技巧
一般会使用window api的情况,实在是因为vb本身不提供某些功能,但是,程式所
需又不得不然,例如:读取registry内的资料,vb只提供savesetting、getsetting 等
系列的指令,但是它只能读取特定地区的值,要读、删、更动其他区域的值时,就无法
使用。再如:仔细看一看combo box的events,其中没有mousemove,但这是我们经常用
上的一个event,那该如何呢?是的,那只有透过winodow api。而vb呼叫window api一
般不都使用api检视员,直接将相对应的api copy到我们的程式中就好,那还用什麽技
巧吗?其实不然,因为vb资料格式的问题,又加上vb本身没有指标,在许多地方需要一
些小技巧才能解决,而且我们经常因应不同的需求,将api 检视员的宣告copy过来後再
做一些修改,最重要的,如果有一个.dll档,它不在api 检视员中定义,那时,就只有
自己想办法啦。
一、 整数参数
windows api32位元vb
============================== =============================
int, int byval long
unit, dword byval long
bool byval long ture时为1
wparam, lparam, lresult byval long
handle(如hkey) byval long
word, atom, short byval integer
byte, char byval byte
eg.
-----------------------------------------------------------------------------
windows api 宣告
short getkeystate( int nvirtkey )
对应的vb宣告
declare function getkeystate lib "user32" (byval nvirtkey as long) as integer
-----------------------------------------------------------------------------
这个api 可用来检视某些key (如insert键、num lock、capslock等)是on/off。程
式如下:这个例子应该可十分楚的看到各个整数间的宣告对应。
-----------------------------------------------------------------------------
dim insertmode as integer
insertmode = getkeystate(vbkeyinsert) and vbshiftmask
if insertmode = 1 then
debug.print "表示 insert mode"
else
debug.print "表示 overwrite mode"
end if
-----------------------------------------------------------------------------
二、 指向整数的指标
windows api 32位元vb
============================ ==========================
lpint (byref ) long
lpunit (byref ) long
lpbool (byref ) long
lpdword (byref ) long
lphandle (如:phkey) (byref ) long
lpword (byref ) integer
lpshort (byref ) integer
lpbyte (byref ) byte