VB与Windows API 间的呼叫技巧[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 firetoucher 的 blog

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

本文关键:Visual Basic
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top