VB API 初级入门教程.docx
《VB API 初级入门教程.docx》由会员分享,可在线阅读,更多相关《VB API 初级入门教程.docx(40页珍藏版)》请在冰豆网上搜索。
VBAPI初级入门教程
VBAPI初级入门教程
API是什么?
这个我本来不想说的,不过也许你知道其它人不知道,这里为了照顾一下新手,不得不说些废话,请大家谅解。
Win32API即为Microsoft32位平台的应用程序编程接口(Application ProgrammingInterface)。
所有在Win32平台上运行的应用程序都可以调用这些函数。
使用Win32API,应用程序可以充分挖掘Windows的32位操作系统的潜力。
Mircrosoft的所有32位平台都支持统一的API,包括函数、结构、消息、宏及接口。
使用Win32API不但可以开发出在各种平台上都能成功运行的应用程序,而且也可以充分利用每个平台特有的功能和属性。
以上为API的相关介绍,不过有些新手看了以后可能还是不怎么明白API到底有什么用?
这里请不要着急,如果你有足够耐心的话,请慢慢往下看。
如何使用API?
估计这才是大家真正关心的,那么如何使用API呢?
在了解API之前,先打开你的VB书,翻到过程函数这章来,在搞清楚API之前应该先搞懂过程函数是怎么一回事!
如果你还不知道过程的工作方式,那么请先不要急着往下看,那样容易走很多弯路。
好了,当你理解了过程函数时,也就是你可以使用API的时候了,别把API看得太难,你就像使用过程函数一样使用API就可以了。
首先,让我们看看一个简单的API,以下:
PrivateDeclareSubSleepLib"kernel32"Alias"Sleep"(ByValdwMillisecondsAsLong)
以上这个API的呢是起一个延时作用。
你如果是刚接触API的话可能会感到API的书写及其复杂,而且会感到很不适应。
其实这没什么的,慢慢习惯就好了。
至于API这些复杂的书写你就不用操心了,在你安装VB的时候微软已经帮我们带上了API浏览器,这些全部都可以利用API浏览器帮我们自动生成。
API浏览器的位置位于[开始菜单-程序-MicrosoftVisualBasic6.0中文版-MicrosoftVisualBasic6.0中文版工具-API文本浏览器]。
打开API浏览器,在最上面的一个文本框中输入Sleep,这时下面列表框中就会自动显示相应的API函数,然后点右边添加按钮即可,接着点击复制按钮,这时你就可以用Ctrl+V把声明的API添加到VB代码窗口中了。
这里我要说一下,有些新手可能还弄不明白。
API的声明范围一般有两种模式,一种是Private(私有的),一种是Public(公用的)。
一般Private是声明在类模块或窗体类中,Public声明在模块中。
你在添加API的时候,添加按钮下面就有API的声明范围,可以根据自己的需要进行添加。
这里我们一般选择私有的(Private)就可以了。
经过上面,我们知道如何添加API,接着我们分析一下API声明,这是你了解API必备的。
首先看第一个单词Private,很显然,我上面刚刚讲过,这是申明一个私有的API变量。
再看第二个Declare,这个单词帮我们告诉VB是在申明API函数,一般申明外在的API函数时都必须带上这个单词。
第三个Sub,别告诉我你不知道什么意思?
这就是我叫你先学习VB中过程函数的意思,这个说白了就是没有反回值,一般如果不是Sub而是Function都带有反回值的。
第四个Lib,这个是告诉VB我们要声明哪一个DLL中的API函数,也就是告诉VB我们要申明第五个单词kernel32.dLL中的API,一般写DLL名称时都要用双引号括起来,如"user32"、"shell32.dll"等,至于后面的.dll这个可以带可不带。
再来看第六个Alias,这个也是需要同后面一个一起用的,我们应该把第六个和第七个连起来一起看Alias"Sleep",这个意思表示将被调用的过程在DLL中还有另外的名称,这个是可选的。
最后括号里面的,也就是和过程函数一样,你传入相应的值就可以了。
上面我们分析完API函数声明以后,接着我们就要自己动手写代码了。
先把这个API复制到Form1代码窗口中,然后写如下代码:
PrivateDeclareSubSleepLib"kernel32"(ByValdwMillisecondsAsLong)
PrivateSubForm_Load()
Sleep2000
EndSub
解释一下,也就是在窗体启动时使用SleepAPI进行延时2秒,后面的参数dwMilliseconds是表示你要延时的秒数,基本上和设置Timer中的秒数一样。
你再看一下Sleep 2000的使用方式,是不是和使用VB过程函数一样呢?
好了,我们的第一个VBAPI程序写完了,可以看到使用API并不是一件很难的事。
如何才能提升你对API的学习兴趣?
API,我常把它看做成过程函数,不过每人都有每人的见解和理解方式,自己的理解方式只要可以帮助自己更好的学习和掌握API,也没必要一定要学习他人的。
1,自己做MsgBox
了解API参数的使用方法是很重要的,这里我们不用VB的MsgBox,直接使用API弹出MsgBox消息框。
首先,打开API浏览器,选择MessageBox,大家可以用这个API和VB内置的MsgBox比较一下,其实MsgBox也就是MessageBox的缩写,只不过一个是API,一个是VB内置的,但两者都是通过API进行工作的。
好了,选择私有声明方式,粘贴到VB代码编辑窗口中,然后新建一个CommandButton,写入以下代码:
PrivateDeclareFunctionMessageBoxLib"user32"Alias"MessageBoxA"
(ByValhwndAsLong,ByVallpTextAsString,ByVallpCaptionAsString,
ByValwTypeAsLong)AsLong
PrivateSubCommand1_Click()
MessageBoxMe.hwnd,"这里是内容","标题",0
EndSub
先让我们来分析一下,首先看第一个参数ByvalhWndAsLong,很显然这是一个长整形变量,所以我们这里需要传递的是数字,你可能会发现我们传递的并不是数字啊,而是Me.hwnd?
?
很奇怪是吗?
如果你真的有此疑问说明你是真心想要学习好API的,现在就让我们来看看Me.hwnd到底是什么东西?
以下摘自VB帮助文档:
hWnd属性:
返回窗体或控件的句柄。
句柄:
是由操作环境定义的一个唯一的整数值,它被程序用来标识或者切换到对象,如窗体或控件等。
现在估计你差不多就已经明白了,我们调用的hwnd其实是一个句柄整数值,你可以用MsgboxMe.hwnd 看一下就知道了。
至于Me这是一个关键字,代表当前Form窗体对象。
如:
Me.Caption="标题"、Me.BackColor=vbRed等。
接上面的,首先我们传入了Me.hwnd,表示是当前窗口调用MessageBox,这里告诉大家一个技巧,也就是以后凡是看到ByvalhwndAsLong,一般都是需要传入句柄的,至于传入哪个对象句柄,那就要看你是怎么实现的了。
ByVallpTextAsString,这个是字符串变量,标识着叫我们需要传入字符串进去,可以看里面的变量字符lpText,属于文本的意思,也就是说是用来显示MsgBox中的消息文本的。
ByVallpCaptionAsString,也是字符串变量,还是传入字符串进去。
在看里面的变量字符lpCaption,其实就是显示MsgBox标题的。
ByValwTypeAsLong,这是一个整形变量,需要传递整形数字,还是看里面的变量字符wType,标识着显示MsgBox类型,这里可以像VB的MsgBox一样使用,如这里可以传入:
vbYesNo,vbOkCancel等,如果忽略那就传入0即可。
好了,按F5启动程序,点击Command1,接着就会弹出一个消息框,这里我们制作以及分析MsgBox已经完成了。
希望你能在这段学习到一些知识。
2,来点实用的吧
就拿隐藏Windows任务管理器来说吧,这里只能隐藏任务管理器中的窗口,不能隐藏进程。
(问:
有没有隐藏进程的?
答:
你想干什么?
),当程序运行后你无法从任务管理器的窗口中关闭程序,只能从进程中进行终止。
好了,还是老规矩,打开API浏览器,输入GetWindow和ShowWindow两个API,声明范围还是私有的,复制粘贴到Form代码窗口中,嗯,好了?
别急,还是API浏览器,选择Combox中的常数,输入GW_OWNER和SW_HIDE这两个API常数,然后粘贴到代码窗口中,问我这两个是干什么的?
那就接着往下看吧。
写入以下代码:
PrivateDeclareFunctionGetWindowLib"user32"(ByValhwndAsLong,
ByValwCmdAsLong)AsLong
PrivateDeclareFunctionShowWindowLib"user32"(ByValhwndAsLong,
ByValnCmdShowAsLong)AsLong
PrivateConstGW_OWNER=4
PrivateConstSW_HIDE=0
PrivateSubForm_Load()
DimlphWndAsLong
lphWnd=GetWindow(Me.hwnd,GW_OWNER)
ShowWindowlphWnd,SW_HIDE
EndSub
又到了分析的时候了,这对刚入门的新手可谓是最激动的时候了。
好了,还是老子,看看两个API的表面意思和传递值变量。
先看GetWindow,表面意思:
获取窗口。
传递值变量:
hWnd整形句柄,wCmd整形命令值。
再看ShowWindow,表面意思:
显示窗口。
传递值变量:
hWnd整形句柄,nCmdShow整形命令值。
然后是使用代码,先看lphWnd=GetWindow(Me.hwnd,GW_OWNER)这句,这句意思是获取当前窗口的所有者窗口句柄,可以看到GetWindow是Function过程函数,执行以后会返回相应的窗口句柄值,这个值为Long整形(同句柄)。
接着调用ShowWindowlphWnd,SW_HIDE,这句意思是显示lphwnd这个句柄的窗口,关键一句是最后的SW_HIDE,这是API函数的常量。
通过设置常量能让系统知道API到底应该怎么执行显示窗口,是显示?
还是隐藏?
Hide当然是隐藏的意思。
好了,编译成Exe,运行后打开任务管理器,查看程序窗口,还有吗?
我又要说一下了,有些人可能不懂为什么要用GW_OWNER这些常量,这些到底有什么用?
还有就是我怎么知道哪些API对应哪些的常量?
其实这些常量你只要稍微注意一下就知道它们是怎么回事了,如在GetWindow中我使用GW_OWNER,在ShowWindow中我使用SW_HIDE这些常量都有一个共同的特点,就是他们都是以API的单词第一个字母为标准。
如GetWindow相对应的常量就是Get(G)Window(W)=GW,ShowWindow相对应的常就是Show(S)Window(W)=SW,这些常量可以自己在VB的API浏览器中找找看。
3,继续往下学吧。
。
上面两个我们讲到了一般API的使用方法,和一些API常量的使用方法,接着我们来看看API类型的使用方法,在了解这一小节前请先搞懂VB中的自定义类型(Type)这章,否则你可能会稀里糊涂的,到时别怪我没提醒你哦!
这次让我们来获取一下鼠标指针的位置。
这里教大家一个技巧,当你想用API去实现某一特定的功能时,却又不知道该用哪个API,这时你可以就表面的意思到API浏览器找找,有70%以上的机率可以找到哦!
现在就拿这个API开刀,那我们应该如何找?
别着急,往下看:
如我们现在要获取鼠标指针位置,可以这样翻译一下:
Get(获取)Cursor(指针)Pos(位置),组合起来:
GetCursorPos,呵呵,一条API就这样出来了,到API浏览器输入这个组合单词,呵,有吧?
见以下:
PrivateDeclareFunctionGetCursorPosLib"user32"Alias"GetCursorPos"(lpPointAsPOINTAPI)AsLong
好了好了,高兴一下就算了,现在让我们分析一下这个API,看其它的没啥不同的,其中只有一个参数,就是最后一个变量有些不懂?
在VB中好像没有见过这个变量?
不明白么?
那就再继续往下看。
lpPointAsPOINTAPI,POINTAPI?
很显然,在VB中并没有此类型,一般都是String、Integer、Long、Byte等变量类型,那么这个也就理所当然的是自定义类型(问:
什么是自定义类型?
答:
不知道,自已不会看书啊)。
既然是自定义类型,那么我们如何才能知道它是如何定义的呢?
这里也就不用你操心啦,还是API浏览器,在最上面的Combox中选择类型,这时下面List中也就自然的把API的相关类型显示出来了,现在我们开始在Text文本框中输入我们需要的自定义类型,POINTAPI,点击添加,出来了吧?
如下:
PrivateTypePOINTAPI
xAsLong
yAsLong
EndType
好了,现在开始写代码,添加一个Timer控件,设置属性见以下:
Interval=100
Enabled?
?
=True
双击Timer控件,转到代码环境中写入以下代码:
PrivateDeclareFunctionGetCursorPosLib"user32"(lpPointAsPOINTAPI)AsLong
PrivateTypePOINTAPI
xAsLong
yAsLong
EndType
PrivateSubTimer1_Timer()
DimlpPointAsPOINTAPI
GetCursorPoslpPoint
Me.Caption="X="&lpPoint.x&"Y="&lpPoint.y
EndSub
好了,分析开始,紧张不?
别紧张,没啥值得紧张的!
见以下:
DimlpPointAsPOINTAPI,申明一个POINTAPI类型变量,我们学过自定义类型的朋友都知道,一般使用自定义类型时都需要先申明一个相关的类型变量方可使用。
GetCursorPoslpPoint,这一步我不说你都知道,调用API呗。
通过这个API获取鼠标指针的相关信息。
这里我们使用了自己声明的lpPoint变量,那为啥要使用这个变量呢?
这里我们回过头来就前两节我们所分析的那样进行分析,可以看到GetCursorPos所需要传递的值,如果是Long,我们就传入整形数字,如果是String,我们就传入字符串,这里是POINTAPI,所以理所当然是要传入POINTAPI类型,但是!
VB中的自定义类型不可以直接使用,所以我们需要先声明一个相同类型的变量。
不知道说了这么多你懂了没?
Me.Caption="X="&lpPoint.x&"Y="&lpPoint.y,最后一句,也就是用来显示当前鼠标的坐标值的,我们通过声明的lpPoint变量来获取相应的鼠标坐标值,如果你不懂,那就请你先把VB自定义类型这章学完再说。
这里关于API的一些使用方法及范例就先介绍到这里,如果你还有耐心往下看下去的话,那我们就接着往下聊!
API初级入门
这个我本来不想说的,不过也许你知道其它人不知道,这里为了照顾一下新手,不得不说些废话,请大家谅解。
Win32API即为Microsoft32位平台的应用程序编程接口(Application ProgrammingInterface)。
所有在Win32平台上运行的应用程序都可以调用这些函数。
使用Win32API,应用程序可以充分挖掘Windows的32位操作系统的潜力。
Mircrosoft的所有32位平台都支持统一的API,包括函数、结构、消息、宏及接口。
使用Win32API不但可以开发出在各种平台上都能成功运行的应用程序,而且也可以充分利用每个平台特有的功能和属性。
以上为API的相关介绍,不过有些新手看了以后可能还是不怎么明白API到底有什么用?
这里请不要着急,如果你有足够耐心的话,请慢慢往下看。
估计这才是大家真正关心的,那么如何使用API呢?
在了解API之前,先打开你的VB书,翻到过程函数这章来,在搞清楚API之前应该先搞懂过程函数是怎么一回事!
如果你还不知道过程的工作方式,那么请先不要急着往下看,那样容易走很多弯路。
好了,当你理解了过程函数时,也就是你可以使用API的时候了,别把API看得太难,你就像使用过程函数一样使用API就可以了。
首先,让我们看看一个简单的API,以下:
PrivateDeclareSubSleepLib"kernel32"Alias"Sleep"(ByValdwMillisecondsAsLong)
以上这个API的呢是起一个延时作用。
你如果是刚接触API的话可能会感到API的书写及其复杂,而且会感到很不适应。
其实这没什么的,慢慢习惯就好了。
至于API这些复杂的书写你就不用操心了,在你安装VB的时候微软已经帮我们带上了API浏览器,这些全部都可以利用API浏览器帮我们自动生成。
API浏览器的位置位于[开始菜单-程序-MicrosoftVisualBasic6.0中文版-MicrosoftVisualBasic6.0中文版工具-API文本浏览器]。
打开API浏览器,在最上面的一个文本框中输入Sleep,这时下面列表框中就会自动显示相应的API函数,然后点右边添加按钮即可,接着点击复制按钮,这时你就可以用Ctrl+V把声明的API添加到VB代码窗口中了。
这里我要说一下,有些新手可能还弄不明白。
API的声明范围一般有两种模式,一种是Private(私有的),一种是Public(公用的)。
一般Private是声明在类模块或窗体类中,Public声明在模块中。
你在添加API的时候,添加按钮下面就有API的声明范围,可以根据自己的需要进行添加。
这里我们一般选择私有的(Private)就可以了。
经过上面,我们知道如何添加API,接着我们分析一下API声明,这是你了解API必备的。
首先看第一个单词Private,很显然,我上面刚刚讲过,这是申明一个私有的API变量。
再看第二个Declare,这个单词帮我们告诉VB是在申明API函数,一般申明外在的API函数时都必须带上这个单词。
第三个Sub,别告诉我你不知道什么意思?
这就是我叫你先学习VB中过程函数的意思,这个说白了就是没有反回值,一般如果不是Sub而是Function都带有反回值的。
第四个Lib,这个是告诉VB我们要声明哪一个DLL中的API函数,也就是告诉VB我们要申明第五个单词kernel32.dLL中的API,一般写DLL名称时都要用双引号括起来,如"user32"、"shell32.dll"等,至于后面的.dll这个可以带可不带。
再来看第六个Alias,这个也是需要同后面一个一起用的,我们应该把第六个和第七个连起来一起看Alias"Sleep",这个意思表示将被调用的过程在DLL中还有另外的名称,这个是可选的。
最后括号里面的,也就是和过程函数一样,你传入相应的值就可以了。
上面我们分析完API函数声明以后,接着我们就要自己动手写代码了。
先把这个API复制到Form1代码窗口中,然后写如下代码:
PrivateDeclareSubSleepLib"kernel32"(ByValdwMillisecondsAsLong)
PrivateSubForm_Load()
Sleep2000
EndSub
解释一下,也就是在窗体启动时使用SleepAPI进行延时2秒,后面的参数dwMilliseconds是表示你要延时的秒数,基本上和设置Timer中的秒数一样。
你再看一下Sleep 2000的使用方式,是不是和使用VB过程函数一样呢?
好了,我们的第一个VBAPI程序写完了,可以看到使用API并不是一件很难的事。
API,我常把它看做成过程函数,不过每人都有每人的见解和理解方式,自己的理解方式只要可以帮助自己更好的学习和掌握API,也没必要一定要学习他人的。
1,自己做MsgBox
了解API参数的使用方法是很重要的,这里我们不用VB的MsgBox,直接使用API弹出MsgBox消息框。
首先,打开API浏览器,选择MessageBox,大家可以用这个API和VB内置的MsgBox比较一下,其实MsgBox也就是MessageBox的缩写,只不过一个是API,一个是VB内置的,但两者都是通过API进行工作的。
好了,选择私有声明方式,粘贴到VB代码编辑窗口中,然后新建一个CommandButton,写入以下代码:
PrivateDeclareFunctionMessageBoxLib"user32"Alias"MessageBoxA"
(ByValhwndAsLong,ByVallpTextAsString,ByVallpCaptionAsString,
ByValwTypeAsLong)AsLong
PrivateSubCommand1_Click()
MessageBoxMe.hwnd,"这里是内容","标题",0
EndSub
先让我们来分析一下,首先看第一个参数ByvalhWndAsLong,很显然这是一个长整形变量,所以我们这里需要传递的是数字,你可能会发现我们传递的并不是数字啊,而是Me.hwnd?
?
很奇怪是吗?
如果你真的有此疑问说明你是真心想要学习好API的,现在就让我们来看看Me.hwnd到底是什么东西?
以下摘自VB帮助文档:
hWnd属性:
返回窗体或控件的句柄。
句柄:
是由操作环境定义的一个唯一的整数值,它被程序用来标识或者切换到对象,如窗体或控件等。
现在估计你差不多就已经明白了,我们调用的hwnd其实是一个句柄整数值,你可以用MsgboxMe.hwnd 看一下就知道了。
至于Me这是一个关键字,代表当前Form窗体对象。
如:
Me.Caption="标题"、Me.BackColor=vbRed等。
接上面的,首先我们传入了Me.hwnd,表示是当前窗口调用MessageBox,这里告诉大家一个技巧,也就是以后凡是看到ByvalhwndAsLong,一般都是需要传入句柄的,至于传入哪个对象句柄,那就要看