说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在VB中使用API函数 (之三)

HTML文档下载 WORD文档下载 PDF文档下载
在VB中使用API函数 (之三)

 
Any

有些消息的参数声明为Any.这表示该参数是一种可变的类型(你可以以整型,字符串,用户自定义或其他的类型来传递).

这有一个这样的例子:

Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" ByVal Hwnd as Long, ByVal wMsg as Long, ByVal wParam as Long, lParam as Any) as Long

lParam 声明为Any并按引用(ByRef)传递.

这里是在这个函数中如果lParam是不同类型的值时应遵循的规则:

如果该值是 传递形式

numeric ByVal(as Long,or as Any)

Null ByVal(as Long,or as Any)

String ByRef(as String,or as Any)

Type ByRef(as Any)

array of Type ByRef(as Any)

如果你的函数声明同上面的一个而且你想传递一个Long型数,你应该这样写:

Call SendMessage(Me.Hwnd,WM_XXXX,0&,ByVal LongValue)

注意尽管头三个参数也是数值,但它们前边并没有ByVal.这是因为在函数声明中它们已经被声明为按值传递(ByVal).第四个参数,由于是按引用传递(ByRef)(VB并不知道你要传递参数的类型),因此你必须加上ByVal 你可以使用别名技术来传递不同类型的参数:

Public Declare Function SendMessageLng Lib "User32" Alias "SendMessageA"(ByVal Hwnd as Long, ByVal wMsg as Long, ByVal wParam as Long, ByVal lParam as Long) as Long

或:

Public Declare Function SendMessageStr Lib "User32" Alias "SendMessageA"(ByVal Hwnd as Long, ByVal wMsg as Long, ByVal wParam as Long, lParam as String) as Long

注意API参数类型本身是不会改变的.例子中的第四个参数总是一个4字节的长型数.当你按值(ByVal)传递一个Long或 Null时,该4字节长的数值就直接传递给函数.如果你传递一个String或其他的什么,你是按引用(ByRef)传递,VB传递的实际上是变量的地址,也是4个字节.

参数传递

你已经知道如何传递参数了,只需把他放到调用的函数中即刻.然而,当你使用API函数时,在传递参数是有一些你应该注意的 细节. ByVal还是ByRef. 通常情况下,你不用为此担心,VB的API浏览器已经为你做好了一切,只需你输入数值它就会照所声明的方式传递.总的来说,ByVal是把实际的数值传递给函数,而ByRef是把地址传给函数.唯一的麻烦就是 Any 类型. 把字符串传递给API函数也并不难.API函数需要的是字符串首字符的地址,然后读取该地址直到遇到一个Null字符.听起来很糟糕,但只是VB处理字符串的实际方法.你唯一要记住的是一定要按引用传递(ByRef)字符串 当你想得到所需的函数返回值信息时,情况有稍微的一点不同.

这里是GetComputerName函数的声明:

Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA"(ByVal lpBuffer As String, nSize As Long) As Long

第一个参数是一个指向字符串的远程指针,第二个参数是字符串的长度.

如果你只是简单的声明一个字符串类型的变量并把它传递给函数,就会出现错误.因此,你首先需要初始化字符串.这里是如何得到计算机名字的例子: Dim Buffer As String

Buffer = Space(255)

Ret& = GetComputerName(Buffer, Len(Buffer))

if Ret& > 0 then CompName$ = Left(Buffer, Ret&)

在这里,待传递的字符串被初始化为有255个空格的字符串.我们把它传递给函数同时还有它的长度.如果出错则返回值为0.

CompName中将保存计算机名. 有些函数也需要传递数组,这里是一个例子:

Declare Function SetSysColors Lib "user32" Alias "SetSysColors" (ByVal nChanges As Long, lpSysColor As Long, lpColorValues As Long) As Long

最后两个参数是Long型数组.为了传递数组,你只需传递它的第一个元素.下面是示例代码:

Const COLOR_ACTIVECAPTION = 2

Const COLOR_INACTIVECAPTION = 3

Const COLOR_CAPTIONTEXT = 9

Const COLOR_INACTIVECAPTIONTEXT = 19

Dim SysColor(3) As Long

Dim ColorValues(3) As Long

Dim Ret& SysColor(0) = COLOR_ACTIVECAPTION

SysColor(1) = COLOR_INACTIVECAPTION

SysColor(2) = COLOR_CAPTIONTEXT

SysColor(3) = COLOR_INACTIVECAPTIONTEXT

ColorValues(0) = RGB(58, 158, 58) '深绿

ColorValues(1) = RGB(93, 193, 93) '浅绿

ColorValues(2) = 0 '黑色

ColorValues(3) = RGB(126, 126, 126) '灰色

Ret& = SetSysColors(4&, SysColor(0), ColorValues(0))

该程序将改变所有活动和非活动窗口的标题栏背景和文本的颜色.
用VB生成EXE文件后,如何在后面加上参数?这个参数怎样传给VB 用VB实现动态显示操作进度程序 用VB实现双向循环链表 用VB实现用户登录密码的修改 用VB与MS-Draw开发通用作图软件 用VB制作TopMost类型窗口 用VB制作Windows风格安装盘 用Visual Basic 6创建基于MTS的商务组件 用Visual Basic实现Windows的重启动 VB用Windows管理技术做你的应用程序 VB用程序给标识字段(ID)赋值的一种简单实现方法 VB用自己的'PROGRAM'测试自己的电脑 有 BitMap 之Menu -VB资料 运行其他程序,并等待执行完毕 -VB资料 再谈VB程序的加密 在 VB 程序中如何设定 Mouse 光标的位置? 在ActiveX DLL工程中慎用App对象-VB资料 在ActiveX控件工程中设置DataField属性-VB资料 在VB中异步执行程序 在VB编程中有效地组织和利用资源 在VB应用程序中巧用DLL 在VB应用程序中使用INI文件的一点体会 在VB中操纵OLE服务器应用程序 在VB中改变显示器的分辨率 在VB中获取和修改计算机名字 在vb中没有指针,怎样才能将数组作为参数。 在VB中如何调用C++Builder创建的DLL 在VB中设置常用的外部设备 在VB中使用枚举变量 在Visual Basic 中使用C++ 类 在WindowsNT网络中广播消息 -VB资料 各位前辈,如果在公司的试用期觉得工资低了,怎么样和公司谈好一点?谢谢! 为什么取不出id字段值! 如何讓SELECT刷新本頁時現有的數据不會消失? 请问这是怎么回事? c语言的源代码!哪里有? 如何在正在运行的窗体中实例化一个控件。 关于向文件中写入表格的问题!谢谢! 爽,两天来在VC版得分2205分,现在偶的专家分有3406了,希望明天能达到5000,这样我就有一个星星了 有人能给我详细解释一下GDI位图和DIB位图的区别吗 smilejiangjun(smile将军)请进 打印问题!! 快来啊,哥哥! 请问,怎样将.fox的文件变成.prg程序 各位前辈,如果在公司的试用期觉得工资低了,怎么样和公司谈好一点?谢谢! 在安装好的机器中提取声显卡驱动吗? 大家有没有兴趣在北京举办一次聚会,大家探讨Java技术? 数据库中的某个字段的数据中包含  ,当把该字段绑定到dropdownlist后,  就显示不出来了.? vb怎么处理导出的历史文件 用户控件问题?急、急、急??? 原文:文字接龙---喜欢玩的请接下去!(转) CInternetSession.OpenURL()打开这个网面,只能得到93字节,怎么处理??? 求救:如何低级格式化硬盘,用什么dos命令? delphi+mapx的问题,求救! 读取数据库怎么这么慢?是不是我的方法不正确? form提交数据后,另一页取值为空?200分相送!! 关于windows.net server的安装 打印问题!!(50) 如何编程获得win2000本机的MAC地址?不用Netbios的方法阿,谢谢 讨论一下,对于个人来讲计算机可以帮助我们做什么? 谁有WS-FTP pro 7.5的注册码! 怎样改变MENU的字体? 请问有谁愿意转让《Object-Oriented Software Engineering: A Use Case Driven Approach》一书 讨论一下,对于个人来讲计算机可以帮助我们做什么? 谁用C++ BUilder写过类似sql 语句生成器的东西。 有谁知道 NetBoy 3.0.1 的序列号?第一个答对者20分全给!本人说话绝对算数。 ADO,如何判断一个连接对象(_ConnectionPtr)是否已经打开? IIS 5.0 & exchange server 有沖突? 修改数据库问题,急,在线等待! 讨论一下,对于个人来讲计算机可以帮助我们做什么? 怎样实现c语言对数据库的操作?(查询,添加,删除,排序。。。) 建立ActiveX控件的问题 求救:java的‘主要类型’本质上是不是对象? 如何编程实现改变显示器的分辩率? 有谁知道 NetBoy 3.0.1 的序列号?第一个答对者20分全给!本人说话绝对算数。 请大家给个方案:关于中文词法分析? 请 newly_ignorant(不学无术) 兄进来领分 怎样控SourceSafe的物理权限 ? 向各位高手求助!简单goto转变成没有goto的语句· 怎么改变DataGrid页导航条数字颜色 谁有IPX在局域网里收发和解析IPX包的例子! 释放连接,在线等待 爸爸 妈妈和小明的年龄和是70岁,爸爸比小明大28岁,妈妈比小明大24岁?爸爸 妈妈 cos指的是功率因数,那sin指的是什么啊? 怎么用YEAR函数计算工龄 宇宙大爆炸理论的一个小小疑问是由一个很小东西爆炸,那东西大概有多小 小明和他爸爸妈妈三人的年龄之和是82岁,已知爸爸比妈妈大4岁,妈妈比小明大24岁,求3人的年龄各是多少? 一次函数y=-x+a与一次函数y=x+b的图像交点坐标为(m,8)如题.则a+b=? 近似数3.1*10的立方与近似数3100的精确度一样.这句话对吗? 线性代数简单证明题为什么最后一行是可以被 13整除就说 整个行列式就可被13整除 4950乘以一个自然数a,乘积是某个数的平方,a最小是多少? 关于宇宙大爆炸的疑问.是不是在一个无限的空间中发生的?大爆炸之前,空间是什么?如果没有爆心,又怎么会有宇宙膨胀 若一次函数y=x+a与一次函数y=-x+b的图像的交点坐标为(m,8)求a+b的值 某配电网的平均有功功率为Pav,功率因数角正切值为tanφ1,安装无功补偿装置后,功率因数角正切值为tanφ2,计算补偿容量Qc是多少 宇宙大爆炸~疑问都说宇宙是由一个原始大球爆炸出来的那那个原始的打球(姑且这么称呼)是怎么来的那呢?难道是本来就存在?不可思议~ 若一次函数y=负x+a和y=x+b的图像交点为(m,8),则a+b= 功率因数的正切值如何计算cosA=0.6 tanA=? 因式分解 1 2x(m-n)-(n-m) 2 3ax的2次方+6axy+3ay的2次方 3 16y的4次方-8x的2次方y的2次方+x的4次方因式分解1、 2x(m-n)-(n-m)2、 3ax的2次方+6axy+3ay的2次方3、 16y的4次方-8x的2次方y的2次方+x的4次方 一次函数y=-x+a与一次函数y=x+b的图像的交点的坐标为(m,8),则a+b=? 用1016乘一个数、乘积是一个完全平方数、求满足条件的最小自然数是( )、 三相电机的功率因数问题一台15W三相交流电机,Y形接法,A、B、C三相实测电流为11A,计算耗电量:P=0.38*11*1.732*0.8(功率因数),计算出耗电量为5.79KW/h,问题是我安装了一台三相电能表计量电机运 若函数y=-x+a与y=x+b的图像交点坐标为(m,8),求a+b的值 正常细胞核和细胞质之间的关系是 We are no longer a little kid AB是半圆O的直径,C、D是弧AB的三等分点,求证:AC、AD两弦与弧CD所围成的图形的面积的三分之一 生物中细胞质和细胞核的区别,就是有什么特点?是遗传上的,不是他们本质.意思就是细胞质遗传和细胞核遗传有什么特点?因为新教材上已经省略了,当题目还是有出现! a little later和a little longer的区别 一共2道大题!8道小题!急 1.求阴影部份面积大小.(6) 2求下面图形阴影部分的面一共2道大题!8道小题! 1.求阴影部份面积大小.(6)2求下面图形阴影部分的面积和周长(2) 我要100道一元二次方程计算题,不要什么填空和选择,还有解答也不要,只要计算题,有多少先给我发过来,谢了抓紧时间,我们老师布置的作业,谁都不想做,可没办法啊~ 《stay a little longer》歌词是什么 3的3n次减去 三分之一x的n次(用因式分解做) 帮忙算一道一元二次方程7n^2-71n-25806=0 商场自动扶梯上面的乘梯须知怎么写 若一次函数y=-x+a与一次函数y=x+b的图像的交点坐标为【m,8】,则a+b=【 】 P=250Kw 当前的功率因数是cos¢1=0.65 目标是想要cos¢2=0.9 cos¢1=P/S1=0.65 cos¢2=P/S2=0.9 tan¢1-taP=250Kw 当前的功率因数是cos¢1=0.65目标是想要cos¢2=0.9cos¢1=P/S1=0.65cos¢2=P/S2=0.9tan¢1-tan¢2=0.685怎么算 sheep a little longer的意思the early morning news的意思 b^3n-1 c^2/a^2n+1×a^2n-1/b^3n-2= 时间函数YEAR(TODAY())和YEAR(NOW())有什么区别?请各位Excel高手说得通俗一些吧,也可举例说明, 宇宙大爆炸涉及宇宙的( )( ) ( ),三方面.谢啦急好的加分. 分式计算:(b^3n-1 )*c/(a^2n+1)除以 (b^3n-2)/(a^2n) 已知一次函数y=(m-2)x+㎡-6的图像与y轴相交,交点的坐标是-2,求m的值 英语翻译是以c开头的单词 {a+b}^{3n+1}/0.5{b-a}^2n 已知一次函数y=(m-2)x+m²6的图像与y轴相交,交点的坐标是-2,求m的值 宇宙大爆炸的声音那里去了?340米每秒?如此巨大的爆炸,不可能没有声音吧?那么什么时候能传到地球?看了那么多回答,反而让我觉得,光也必定可以作为介质给声音使用,如此巨大的爆炸, 如图已知圆o的直径AB=40cm,点c,d,是直径AB所对的半圆三等分点,求弦AC,AD和弧CD所围成的图形面积. 求土方的工程量甲方要求挖出一条长357米,宽0.8米,深1.5米的工作坑,但是为了防止塌方实际挖出的工作坑为长357米,上宽3.5米,下宽1.2米,深2米的梯形.那么多出的工程量土方应该是多少立方米呢? 把一个准确数四舍五入得到一个近似数,这个数的准确数就是这个近似数的真值,近似数1.80和近似数1.8的真值有什么不同? 289:170化简 一次函数y=(m-1)x+m-1的图像与y轴交于点(0,-1)那么m的值为 一个数四舍五入后得到近似数为5万,则这个数最大可能是 200分之170化简 细胞有丝分裂之前是否存在姐妹染色单体 如图,两个正方形的边长分别为4厘米和6厘米,求阴影部分面积, COS∮谢谢指教如果功率因数底到底是怎么回事 是不是电容坏了 一个直棱柱有16个顶点,它是几棱柱,有多少条棱,多少个面 近似数2.5万精确到_____位 功率因数那单位怎么念的?cos& 如果一个棱柱一共有12顶点,底边长是侧棱长的一半,并且所有的棱长的和是120cm,那么每条侧棱长是 cm . 近似数25.08万精确到——位? WP4000的λ与cosφ哪个表示功率因数? (1).五棱柱共有()条棱,()个顶点 (2).有十一个面的棱柱有( )个顶点,( )条棱
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘