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

在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))

该程序将改变所有活动和非活动窗口的标题栏背景和文本的颜色.
国外iOS大牛:开发Apple Watch应用我犯过的错 云上Java System Profiling与Debugging——蚂蚁金服观察与实践 搜狗商业平台Java技术实践 Java在电信软件领域的技术实战 关于Java框架Vert.x的几点思考 Java在游戏服务器开发中的应用 Java框架研发思考 那些年,Java程序员用过的开发工具 Java内存模型的历史变迁 Java 8与Apache Ignite Java开发与技术挑战——关于技术的技术思考 专访唯品会架构师肖桦:做编码的架构师 越来越“简单”的Java 我的Java!越过山丘 专访沙梓社:做个“Think Different”的技术牛人 基于ES6,使用React、Webpack、Babel构建模块化JavaScript应用 财税街创始人石克清:创业须空杯心态+有效社交 自我知识管理:连贯性就是生产率 玩转Google I/O 2015:Android M、IoT、Glass 2.0、VR、ATAP ARC中Retain Cycle揭秘 失控与逆转!企业移动化2.0时代下如何求变? 玩转物联网之MQTT 专访都灵创客教育奚炎:被忽视的Maker教育 13岁iOS开发者:Swift开发Sprite Kit游戏实践 专访豌豆荚「自动装」开发团队:无需Root即可批量点击「下一步」 iOS项目的持续集成与管理 《近匠》谛听科技,探索智慧家庭的智能网关 【简讯】Python 3.5.0b1发布 《算法的乐趣》作者王晓华访谈:多看、多做、多想是秘诀 专访李祎:Java在Testin的技术应用 React首部经典图书推荐:全程经典实例,360度剖析React.js 为什么介绍sql server的书都是跟ASP联系的,有没有跟delphi 联系的? session.timeout的设置问题 我是一个初学者,我有6个问题想请教大家!希望给一点帮助 请大家帮忙想一招,我是第一次做这样的问题,简直是不可思意,吓死我了 工资太低!工作难找?提议结成联盟 初学编程,请教个小问题 请问可不可以定义 vector<vector<mystruct>> 类型? 基于单片机的步进电动机的问题,在线给高分!!!!!!!!! 无法打开的文件 怎样判断某天所属的星期的星期一和星期天对应的日期分别是什么? 如何对DBEdit组件中输入的数进行类型检查??? 我的系统是2000 server,可是我在局域网的另一台机器上实现远程登陆 请大家谈谈.net java brew三种平台的优缺点。答者有分。 怎样判断某天所属的星期的星期一和星期天对应的日期分别是什么? 什么问题啊? 怎么样才能将开发手机游戏?? 调查:这里有没有程序员买有PDA的??比较高档的。比如康柏,sony等等 有2个程序有问题,请各位高手找出错误!先谢了! 奇怪,我的BLOWFISH加密算法每次使用同一个密钥加密同一个字符串的结果都不一样! 如何使PICTUREBOX中的底图能缩放,或者哪里有透明的容器控件?在线等。 如何判断鼠标离开了一个窗口的显示区 200分紧急求助! 明天(3月13日)是我一个朋友的生日,我们一起祝福他吧:) 请大家谈谈.net java brew三种平台的优缺点。答者有分。 急急急!!! 怎么配linux的dns服务阿? 有谁知道啊? 点击链接网页竟变成下载对话框,啥会事? title为什么显示不正常 哪里有VC.NET的电子书下载? 急!急!请解释一下 请高教~~建主页~~学校的 为什么我下载的j2ee.jar里没有EJBLocalHome和EJBLocalObject接口 如何让为windows 2000 sv 同时支持asp cgi php? 如何用QQ发送消息?高手帮忙! 關於算法的問題﹐ 大家來幫幫忙呀﹗ 用asp编程怎样验证用户登陆名和密码!怎样设置用户的使用权限!我用的是sqlserver2000数据库 安装dbgrideh 的问题。 我先杀你们,再杀自己,然后逃之夭夭---(无内容) 请高手帮忙:原本显示正常的图片现在不能显示了 button的大小可以自己控制吗? 怎么使用ViewState 好歌推荐 念来去 - 小柯 关于值传递的问题 谁能告诉我,通常Windows下,有几种日志文件? 大家用JSP后台一般用什么数据库,并说出为什么谢了! 一个奇怪的问题! *****如何判断Pointer是否为TObject***** 不使用MFC,不弹出打印对话框,如何得到指定名称的打印机的DC 毕业设计的问题,请各位高人指点! IP控件 如图,圆O直径AB=4,C为圆周上一点,AC=2,过C作圆O切线L,过B作L垂线BD,D为垂点,BD交圆O于E 1,求角AEC1,求角AEC2,求证:四边形OBEC是菱形 灰常级,一直有四个解,已知如图,抛物线y=x2-x-1与y轴交于C点,以原点O为圆心,以OC为半径作⊙O,交x轴于A、B两点,交y轴于另一点D.设点P为抛物线y=x2-x-1上的一点,作PM⊥x轴于点M,求使△PMB∽△ADB时 英语翻译1.我已经收集邮票5年了2.Tom已经跑了2个小时了3.我爸爸已经看报纸看了10年了4.自我三岁起,我就一直跳舞 石家庄哪里有卖盐的 \(^o^)/ 用化学式表示除去下列物质中少量杂质的过程,并注明试剂名称:物质.杂质.试剂.KCl.FeCl3..HCl.H2SO4..Cu(NO3)2.Hg(NO3)2..BaCl2.MgCl2..NaOH.Na2CO3..打得累死了! 石家庄哪有盐啊? 关于泊松概率的一个问题急诊中心在长度为t的时间间隔内(单位:h)收到的紧急呼叫的次数X服从参数为0.5t泊松分布,而与时间间隔的起点无关.求某一天上午10时到下午1时没有收到紧急呼叫 专科学国际贸易实务能去做什么?学工程造价和这个比哪个更好就业呢? 如图所示,AC、BD为圆的两条互相垂直的直径,圆心为O,半径为R.电荷量均为Q的正、负点电荷放在圆周上,它们的位置关于AC对称,+Q与O点的连线和OC间夹角为60°.下列说法正确的是 A.O、C两点 石家庄哪里卖高级无碘食盐 在等腰直角△ABC中,AC=BC,点D在AB上.如果AD=AC,DE⊥AB相交于点E,那么BD——CE?(在——上填> < =) ,AC、BD为圆的两条互相垂直的直径,圆心为O,半径为r,将等电量的正、负点电荷放在圆周上,它们的位置关于AC对称,+q与O点的连线和OC间夹角为30°,下列说法正确的是AC两点的电势相等BD两点的电势 做飞机模型的机翼、机身、尾翼等地方用什么木材或什么材料?做飞机模型的翼型用什么好?战斗机,仿真要既坚固又轻的!要飞的! 一项调查显示,在一个城市,一个月平均有9.5天会下雨现在估计出:(1).一个月刚好10天会下雨的概率(2).至多10天会下雨的概率(3).多于10天会下雨的概率 AB、CD为圆的两条相互垂直的直径,圆心为O.将电量相等的正、负电荷+q和-q放在圆周上关于AB对称且相距等于圆的半径的位置,如图所示,要使圆心处的电场强度为零,可在圆周上再放一个适当电量 “青涩”意思“青涩”,如何理解其意思,如果说表演青涩,那又是何意思? 求大神看看我的这段程序出了什么毛病,#includeusing namespace std;class Employee{public:\x05Employee(int pId,char* pName,int pAge);\x05~Employee();\x05friend class Manager;private:\x05int id;\x05char* name;\x05int age;};class Manager{pu 如图所示,AC、BD为圆的两条互相垂直的直径,圆心为O,半径为r,将等电量的正、负点电荷放在圆周上,它们的位置关于AC对称,+q与O点的连线和OC间夹角为30°,下列说法正确的是A.A、C两点的电势关系 青涩是什么意思? 可爱是不是傻或可怜,没人爱的意思? 《家乡的竹子》这篇作文怎么写?我急! 赤壁之战的5个步骤.(急!)急需赤壁之战中的5个步骤.最好是用什么歇后语,成语概括的!如果不是歇后语和成语,那么字数要少一点,..1.2.3.4.5.希望知道的哥哥,姐姐,弟弟,妹妹,叔叔,阿姨,爷爷,3Q3Q 如何用CAD绘制一个动物的图案 ( )鲸的体形像鱼,()它不属于鱼类.填上合适的关联词 青涩的意思 我很可爱可怜没人爱 工程竣工测量记录里的建筑物全高和标高有什么区别 我是想知道它在爱情里是什么意思? 可怜没人爱什么意思 泊松积分是怎么证明的 泊松流的合成,一定要详细过程题目是理发师等待顾客时间服从指数为λ指数分布 理发店又十个理发师,顾客等可能选择理发师 问对理发师a等待顾客时间的分布 用卷积公式和几何分布我怎么 一个男生说你真可怜没人爱啊,他先打了我一下, 什么是“泊松积分”? 青涩不及当初,聚散不由你我.什么意思. 可爱=可怜没人爱?… 昆明什么时候会有盐卖我家的盐 没有 以下名词解释哪些是正确的?(多选) 如定义int a[5];(其中:0<=i 云南昆明整形,昆明为什么没盐 求“礼教吃人”名词解释,是准确的名词解释! C语言数组问题 (是其下标从0开始计算) 举个简单例子 说下哈!a[5].因此5个元素分别为a[0],a[1],a[2],a[3],a[4] 飞机机翼结构 机翼是什么材料做的? 12V36w灯泡与8v16w灯泡电阻一样 为什么额定电压额定功率不一样 请问巿场上称斤散卖的盐是不加碘的吗 日本二次大战用的零式战斗机机翼是用什么材料做的?有个节目中说机翼厚度只有0.5毫米,是不是说错了? 测量小灯泡电阻时为什么几次测得小灯泡电阻不一样? 现在为什么我们这里卖的盐都是未加碘的了? 填诗句:黄鹤楼中吹玉笛,江城五月落( ) 流线型要是前尖后圆不是更好了吗?流线型是前圆后尖, 用来制造飞机机翼的轻质结构材料是什么? 是和女朋友吵架时她说的 科学题,除杂质括号里的是杂质1.生石灰(石灰石)2.二氧化碳(氧气) 飞机的几机翼构成是什么 长得有点大众化是什么意思 英语翻译People who are deprived of caffeine suffer with drawn symptoms,esp.headachesone cure for headache,oddly enough,is caffeine 如图,圆O的直径AB=4C为圆周上一点,AC=2过点C作圆O的切线L,过点B作L的垂线BD垂足为D,BD与圆O交于点E(1)求∠AEC的度数(2)求证:四边形OBEC是菱形 说一个女孩长的很大众化, 2道科学除杂质题1.一氧化碳中含有杂质二氧化碳,问如何去除二氧化碳,同时又不增加新的杂质.请说明理由 2.金属铜中含有杂质氢氧化铜,问如何去除氢氧化铜,同时又不增加新的杂质.请说明 环球小姐决赛即将举行 佳丽泳装展示傲世界最高大的狗在美国去世 存活年龄为手机疑遭美监听 默克尔怒了哈士奇模仿婴儿爬行萌翻网友【组图】墨西哥一美国公司糖果厂锅炉爆炸 40中韩超人气“包子脸”女星(组图)美媒:美逐渐蜕变成为“监视国家”新加坡女子穿比基尼街头秀一字马(组图外媒:日大规模夺岛军演剑指中国世界最高大的狗在美国去世 站立达22美国财长呼吁朝野同意以合理减支取代自世界最高大的狗在美国去世 存活年龄为英国BBC知名主播再添性侵罪名 下月美军方:因财政扣押明年将裁减最少6架美国海军基地再发枪击案 2人受伤枪手墨西哥一家美国公司糖果厂爆炸20人失沃尔玛中国已关店11家澳林火确认为国防部军训引发葛兰素史克在华销售额暴跌六成可口可乐中国第43家厂投产美军一美分卖掉退役航母台股24日开盘跌11点 为9757点孙悟空将日本打回原形蔡英文找\"台独教母\"救观光 被批该务实面对事实的,恰恰是台当局自己台湾人也穿秋裤吗?(我在大陆看台湾)老龄化危机 台湾年金改革能让年轻人买台湾“司法改革”:犯罪前科律师能当委台湾退伍军人反年金改革 军官学校校友台军人士:清泉岗空军基地查毒太深入恐文化部发布规划文件 推动非遗传承与国[囧图]感觉话题沉重起来了,最好别这临沂消防异地互查清剿火患 对公共场所姚明当选中国篮协主席 外媒称经验和资台媒:苏格兰不满英国脱欧 考虑明年再美教授30年每天自拍一张记录衰老过程美联储官员预期很快加息 “特朗普经济印媒关注中印战略对话:高级别会谈未破印尼总统称拟与澳联合巡逻南海 前提是丽水市区旧城改造最新计划出炉!8个老神经毒剂之王“VX”:曾因意外泄露毒郭树清接任银监会主席
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘