api入门 菜新 vbgood.docx

上传人:b****4 文档编号:24650182 上传时间:2023-05-29 格式:DOCX 页数:31 大小:35.98KB
下载 相关 举报
api入门 菜新 vbgood.docx_第1页
第1页 / 共31页
api入门 菜新 vbgood.docx_第2页
第2页 / 共31页
api入门 菜新 vbgood.docx_第3页
第3页 / 共31页
api入门 菜新 vbgood.docx_第4页
第4页 / 共31页
api入门 菜新 vbgood.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

api入门 菜新 vbgood.docx

《api入门 菜新 vbgood.docx》由会员分享,可在线阅读,更多相关《api入门 菜新 vbgood.docx(31页珍藏版)》请在冰豆网上搜索。

api入门 菜新 vbgood.docx

api入门菜新vbgood

Api教程菜新vbgood

Api教程菜新vbgood1

[原创]VBAPI中级入门(接VBAPI初级入门)

(一)5

[原创]VBAPI中级入门

(二)菜新作品10

[原创]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,我还想写下去,不过我不知道写得怎么样,先发出来看看大家的反应再说。

大家如果发现有什么不对的地方尽请指出,我接受大家的批评。

[原创]VBAPI中级入门(接VBAPI初级入门)

(一)

阔别多日,这次再让我们回到VBAPI的神奇世界中。

鉴于上次文章作品给网友们的反响很大,并强烈要求继续写下去,所以这些天特意抽了一点点时间。

不过最近因为身体很不适,所以坐在电脑前的时间也比以前少了,以致拖到现在才把文章发布出来。

呵呵,好了,废话不多说了,转入正题。

这次咱们来深入了解API在VB程序中的运用,并且有些复杂的API使用可能会使你感到很悲观,不过我会尽量用最容易让人理解的方式表达出来。

注:

如果你是一个刚入门API的初学者,那么请你先看看关于我写的初级API入门教程,也许会对了解API有帮助,地址:

一、API的类型结构。

API的类型结构与VB中差不多,一般声明时使用Type定义类型。

如果你不懂的话麻烦你先打开你的VB入门教程书看看。

好了,文字理论咋不多说,用实例证实理论(偶喜欢这句话)。

1,在Form窗体上用API画文字,最初了解类型结构填充

;PrivateDeclareFunctionDrawTextLib"user32"Alias"DrawTextA"(ByValhdcAsLong,ByVallpStrAsString,ByValnCountAsLong,lpRectAsRECT,ByValwFormatAsLong)AsLong

;PrivateConstDT_CENTER=&H1

;PrivateTypeRECT

LeftAsLong

TopAsLong

RightAsLong

BottomAsLong

EndType

PrivateSubForm_Load()

DimlpRectAsRECT

Me.AutoRedraw=True

Me.ScaleMode=3

'填充结构

WithlpRect

.Left=0

.Top=0

.Right=Me.ScaleWidth

.Bottom=Me.ScaleHeight

EndWith

DrawTextMe.hdc,"这是文字效果",-1,lpRect,DT_CENTER

EndSub

好了,咱们开始分析,首先看Form_Load里面的代码。

DimlpRectAsRECT。

这一句是声明一个RECT自定义类型,这个类型可在VB浏览器的类型中找到。

Me.AutoRedraw=True。

这一句其实就是设置当前窗体的AutoRedraw属性,设为True,表示持久输出图像。

不懂查帮助。

Me.ScaleMode=3。

设置当前窗体的像素模式。

至于为啥要设置为3,下面将会讲到。

WithlpRect...EndWith。

从With到EndWith为填充咱们声明的lpRect类型结构。

具体看里面的。

.Left=0。

这里相当于x坐标的初始值。

.Top=0。

这里相当于y坐标的初始值。

.Right=Me.ScaleWidth。

Right表示从Left开始的宽度。

这里赋值为Me.ScaleWidth表示当前窗体像素的宽度。

.Bottom=Me.ScaleHeight。

同上。

Bottom表示从Top开始的高度。

Me.ScaleHeight表示当前窗体像素的高度。

关键的就是下面一句,是它帮助我们在窗体中画出文字的。

这里说一下为什么需要把当前窗体的坐标度量单位(ScaleMode)改成3(Pixel像素),因为Windows不管画什么都是以像素为单位,所以我们为了确定咱们所画的文本显示在正常位置,就必须使用像素为单位!

明白了么?

(问:

还是不明白?

答:

默默无语两眼泪啊~~)

DrawTextMe.hdc,"这是文字效果",-1,lpRect,DT_CENTER

现在分析这条API。

看看里面需要传入的参数:

ByValhdcAsLong,ByVallpStrAsString,ByValnCountAsLong,lpRectAsRECT,ByValwFormatAsLong

ByValhdcAsLong。

hdc为Long整形,所以应该传入数值,不过给大家一个技巧,以后凡是看到hdc这个变量字符,表示需要传入的为一个hdc句柄,注意可不是hwnd句柄哦!

这个句柄窗体和Picture控件都有,大家注意看就是了。

ByVallpStrAsString。

传入字符串。

这里就是咱们需要画到窗体上的文本。

ByValnCountAsLong。

传入数值。

看看里面的声明字符nCount,可以看出来这与数目有关,与什么数目呢?

当然是文本罗。

也就是说要显示的字符个数,一般如果需要全部显示出来可设为-1即可,表示显示所有字符。

lpRectAsRECT。

一个Rect类型,这里需要使用Rect类型,上面我们已经在API浏览器找到了这个类型并声明了,所以只需要传入相应的类型声明就可以了。

不过这次与我上一次讲的有所不同,上次是通过API类型结构获取相关的信息,而这次需要你把API类型结构填充好以后再传入进去。

希望大家在这里注意下。

可能有人要问了,那为什么这次就要这么做?

我的回答是:

因为API并不是万能的和灵活的,有的时候需要我们人为的设置一些参数来完成自己所需要这个API的功能,大家可以通过上面的结构填充就可知道,我们所要画文本的整个范围就是整个Form窗体的范围啊!

ByValwFormatAsLong。

传入数值,不过可以看看nFormat声明字符,可以想像这里可能需要传入这个API的使用格式,就如我们前面所讲的那样。

现在打开API浏览器,在常数中找找,输入这个API的开头,Draw(D)Text(T)=DT_,可以看到有很多吧。

具体这些都是什么意思可以查查相关的API资料。

这里我们只传入了一个DT_CENTER常数,意思是居中显示。

默认可以为0,因为这里为文字显示格式,所以你什么格式也不想要的话可设为0以后文字显示在左上角。

OK。

F5运行之。

窗体中间正常显示“这就是文字效果”的几个文字。

至此这里API相关结构的填充与获取我不想再多说了,不懂的话建议把我以前发的API入门帖子与这里的第一小节一起看看,或许你会明白些什么?

?

二、Windows消息

可以说这节是本文中的重点,当你能理解该节中的所有内容时,我相信你已经可以用该方法写出不错的程序功能了,好了,不说多了,接着往下来看。

在了解消息之前,先让我们看看Windows消息到底是什么?

Windows系统是一个消息驱动的OS,所以操作都是基本消息驱动的,这就好比我用鼠标按下一个按钮,这时Windows会先发送该鼠标的左键按下消息,也就是WM_LBUTTONDOWN到你按下的那个CommandButton,这时就会激发按钮的CommandButton_MouseDown事件,然后松开鼠标,Windows这时会发送WM_LBUTTONUP消息,激发CommandButton_MouseUp事件,说明该鼠标按键已经弹起(松开),这时就会激发咱们VB中的CommandButton_Click事件,所以你点击某个按钮以后就会执行相应的操作。

这里我不想说得太深太复杂,只是想以这种简单的理解方式让你明白Windows消息到底是什么,也许说得太含糊,但是对你第一次理解这东西已经足够了!

实践1:

现在就让我们以消息来写一个入门程序,先是打开VB(问:

废话。

答:

……),然后打开API浏览器(问:

早打开了。

答:

……),然后在API浏览器找到SendMessage,再然后在API常数中找到WM_CLOSE,好了,在VB工程中新建一个标准EXE,添加一个Command1按钮,写入以下代码:

PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong

PrivateConstWM_CLOSE=&H10

PrivateSubCommand1_Click()

SendMessageMe.hwnd,WM_CLOSE,0,ByVal0&

EndSub

好了,先看看SendMessage这个API,第一个参数,hWnd为Long,所以传入一个对象的句柄,第二个参数wMsg同样为Long,这里要说一下,在该API的第二个参数,大多数都是传入以WM_为开关的常数,希望大家注意!

第三个wParam也是Long,该参数的意思大多数是取决于第二个参数uMsg,这里传入的常数是WM_CLOSE,所以这里输入0即可,最后一个参数,lParam为Any,Any是什么意思这里我说一下,也就是是说明该参数可以指定为任何标准数据类型,允许将任意数据类型传递给该参数!

希望你明白,该参数的值也是取决于uMsg。

再看看Command1_Click事件中的代码,其中使用了SendMessageAPI,第一个是当前的窗口句柄,至于什么是句柄我在API初级入门时讲过,第二个为WM_CLOSE常数消息,也就是说给当前窗口发送关闭消息,第三、四个参数分别为0,具体参数我已经说过,取决于你在uMsg传入的常数。

现在F5运行点击Command1按钮试试。

小提示:

注意这里的句柄当然也可以输入其它窗口的句柄,执行效果同上面一样,可以关闭你传递的那个句柄窗口!

自己试一下,具体怎么获取窗口句柄我在VB初级入门时讲过,自己去试试吧!

实践2:

现在我们开始第二个消息程序,还是使用SendMessage,这次我们是要给一个按钮传递Click(点击)事件,最近貌似有些人在问这个问题?

现在就写出来大家实践实践。

新建一个标准EXE,添加两个CommandButton控件,分别为Command1和Command2,然后输入以下代码:

PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong

PrivateConstBM_CLICK=&HF5

PrivateSubCommand1_Click()

SendMessageCommand2.hwnd,BM_CLICK,0,ByVal0&

EndSub

PrivateSubCommand2_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 公共行政管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1