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

VB使用调用外部程序函数实现API函数高级功能

HTML文档下载 WORD文档下载 PDF文档下载
VB使用调用外部程序函数实现API函数高级功能
作者:曹首光
摘要 本文以Visual Basic 为例,介绍了在使用调用外部程序的办法实现以下五种功能的方法:1)关机和重新启动;2)使用缺省(默认)的程序打开文件或链接; 3)调用"资源管理器"; 4)复制和移动文件夹;5)把DOS程序的屏幕显示信息写入文件。
关键词 Visual Basic, Shell 函数,外部程序

调用调用API 函数可直接使用Windows 底层资源,因此功能强大。然而API函数使用较复杂,易出错。本文将以Visual Basic 6.0中的shell 函数为例,详细说明调用外部程序实现一些windows 高级功能的方法。
一、关机和重新启动Windows
在"开始-运行"对话框或DOS窗口中输入 rundll.exe user.exe,exitwindowsexec命令,Windows 就会重新启动;输入 rundll.exe user.exe,exitwindows,机器关闭。
所以您在Visual Basic 中使用下面两个命令来实现重起和关机:
Shell "rundll.exe user.exe,exitwindowsexec", vbHide '重新启动
Shell "rundll.exe user.exe,exitwindows", vbHide '关闭
二、使用缺省(默认)的程序打开文件或链接
在Windows的Command子目录中有一个Start.exe, 在这个命令后加上一个文件名参数,该文件即可用缺省程序打开。所以在Visual Basic 中可使用下面的代码:
Dim FiletoOpen$
FiletoOpen= "system.ini"
Shell "Start.exe " & FiletoOpen, vbHide
注意:1)如果变量FiletoOpen的值为包含长文件名的字符串,以上第三行应为
Shell "Start.exe " & Chr(34) & FiletoOpen & Chr(34) ' Chr(34) 为双引号。
这是因为当参数中的长文件名含有空格时,程序会认为空格以前的部分子符串为一个参数,所以会产生找不到文件的错误。例如要用Winword.exe 打开"C:\my documents\mydoc.doc" 时,如果在 "运行"对话框中输入start.exe c:\my documents\mydoc.doc, 系统寻找的文件是 c:\my 和 documents\mydoc.doc两个文件,所以会出错。正确的命令应当是start.exe "c:\my documents\mydoc.doc"
2)在上面第三行中,Start.exe 后别忘了留空格。
另外程序员也常常希望用户能点击软件上的链接而直接打开自己的主页或给自己写信。用下面的方法可以不另外添加控件而实现这种功能。
Dim url$,email$
url="nwdonkey.uhome.net"
email="mailto:nwdonkey@371.net"
shell "start.exe " & url, vbHide
shell "start.exe " & email, vbHide
三、调用"资源管理器"
用下面的命令可调用Windows资源管理器,并打开指定的文件夹:
Dim PathtoOpen$
PathtoOpen = "c:\my documents"
Shell "explorer.exe " & PathtoOpen, vbNormalFocus
四、复制和移动文件夹
是不是很怀念强大的DOS命令?其实所有的DOS外部命令所能实现的功能,您都能在VB中通过Shell函数来实现。比如您要把一个子目录的包含下一级目录的所有文件复制到另一个位置,可使用下面的代码:
If Dir$("c:\mydos", vbDirectory) = "" Then MkDir "c:\mydos" '在硬盘上新建一个c:\mydos的文件夹。
Shell "xcopy.exe c:\windows\command\*.* c:\mydos/s/e", vbHide
Shell "explorer.exe " & "c:\mydos", vbNormalFocus
同样我们也以用shell 来调用move.exe来实现来实现文件或文件夹的移动。
说明:此方法仅限于外部DOS命令,并需要把参数中的长文件名转换为8.3制文件名,转换似乎可以用API函数实现,我们自己编写了不调用API函数实现这一功能的函数,您如果需要请到http://go.163.com/
~nwdonkey/vb/ 去下载。
Contributor: NorthWest Donkey
五、把DOS程序的屏幕显示信息写入文件
Shell函数不支持DOS内部命令,要想在VB 中使用DOS内部命令,就得使用迂回的办法:先把DOS命令写到一个BAT文件中,然后再用Shell函数调用该BAT文件。如果您是编写DOS批处理的高手,则完全可以先编写好BAT文件,然后再用Shell 函数来调用。另外,大家还记得DOS命令中的管道命令符吧? 例如〈和〉号可以把一个文件的内容传递到另一个程序中去,也可把DOS应用程序的屏幕输出写到一个文件中去。例如用下列代码可把DOS命令copy的帮助信息写到一个文件中去。
Open "c:\test.bat" For Output As #1 '建立批处理文件
Print #1, "copy/?>c:\copyhelp.txt"
Print #1, "@exit"
Close #1
Shell "c:\test.bat", vbHide
Shell "start.exe c:\copyhelp.txt", vbHide
注意:'test.bat 中最后一句必须是@exit,不然经Shell调用后的批处理文件无法从内存中退出。
这种方法可以把dos 程序中显示在屏幕上的信息写入一个文件,因此对编写一些dos应用程序的windows 版本特别有用。
以上以Visual Basic 为例,讲述了巧用Shell函数实现一些一般不容易实现的功能的方法。一般情况下,其他编程语言也都提供了类似的函数接口,在这些编程环境下也可以轻易实现上述功能。对本文,您如有什么问题请寄信到 nwdonkey@371.net 或到我的主页http://nwdonkey.uhome.net/ 上留言。
河南省洛阳市解放军外国语学院第三系 曹首光
源代码管理十诫 游戏手柄也能编程 极客打造不用键盘输入的IDE 开源不只是程序员的专利 政府也可以 开源搜索Elasticsearch:PB级数据的快速搜索 月下载量已达20万次 乐视网联手富士康推超级电视 欲颠覆传统盈利/营销模式 IBM 2012IT实践达人赛圆满落幕 宣布成立新兴技术大学 对比MapReduce 流处理框架没有所谓的查询层 美国政府:修复漏洞仍有风险 应禁用Java插件 AppGlu应用辅助工具:帮助开发者处理善后工作 iOS!你这几个方面该向Android好好学习 小于1%,中国有真正自主的移动操作系统吗? 张小龙专访系列(下):不一样的产品思维 Gartner:截止到2016年公有云市场复合增长为17.7% Appcore:在企业内部部署IaaS平台 B轮融资600万美元 超现实主义!用脑电波控制你的计算机设备 搜狐否认“情理之中”的退市 上市仍是最优选择 六大BaaS产品推荐:移动开发必备的后端云服务 未遵守承诺 微软遭遇欧盟7.31亿美元巨额罚单 PaaS正能量:6人团队,仅1人全职后端 支撑6000万用户 三星:我不抽成,收益100%让开发者拿去! 腾讯开放平台推“送红利计划” 承诺半年内不参与分成 JavaEE快速开发框架Wabacus 4.0发布,开发效率提高五倍以上 市盈率创新高 谷歌为什么会在苹果博弈中暂时胜出 从Rovio遇到危机,看现在应用市场的演变 Windows Azure支持Android应用 面向东亚推广云服务 抛弃DRAM、拥抱闪存,Facebook重做Memcached 夏普三星联姻 电子行业或将多元化发展 从下拉菜单设计细节看Amazon对用户体验的把握 Chartboost美女CEO:40人团队服务3亿移动玩家 Distimo:新晋开发者想让产品得到关注越来越难 OpenFeint绝迹后,开源项目OpenKit继续前进 请问如何编写一个类似OFFICE里的ACTIVEX插件(ouactrl.ocx)一样的函数库! 敬请xp高手。 夜深了,好安静,工作还得继续,突然莫名的伤感,只想聊聊天 求助25道选择题!!!急!!!(在线等待) 关于2003年06月的《程序员》中的java设计模式 ShellListView的闪烁问题 问一个动态存储数据的问题~~ 急,散分求救,关于关键路径 急问!Instr()函数的含义及用法! 我真是很愤怒,我是广州连新路(即时广东省软考办)那里报名的,他们的工作水平真是低 一个头痛的问题:客户要求显示所有符合条件的字段和纪录,就是说,对于一张表,要可以让客户选他要看的字段,并且可以对所有字段进行查询 各位前辈请指教几个问题,我什么都不懂 『转帖』为什么要更换ID---好久没来,顺便散点分 请教: Weblogic牌号6。1下运行JSP程序附带标签库的问题? 求解过滤和统计问题,急用,谢谢! 凤凰是我的男朋友(淡月儿) 求解过滤和统计问题,急用,谢谢! 【社论】痛批妹妹,女人都是些什么东西,tmd 我真是是很气愤,我是在广州连新路(即使广东省软考办)那里报名的 为什么不能创建同义词,哪里错了??? 为什么不能创建同义词,哪里错了?????? 有关Dll中资源释放的问题 烦恼的问题,为什么服务器装了sql server package3之后,客户机都不能浏览网页了? 新手问题,字符串中如何传入字符 笔记本如何外挂光驱? 救命呀!!毕业论文摘要翻译 急! 关于读文件的一个小问题? 一个挺弱的问题 MVC的工具除了struts还有什么 我打算学习.Net,请大家帮忙给点好的初学入门的资料下载或者好的网址! 又是IE的小问题..以前没有遇见过!请指教! 关于子类调用父类构造器的问题 怎样用VC语句获取所有的打印机名称(如果机器上连有多台)? 请能给我讲解一下堆栈与堆!!! 关于udp的线程问题 怎样用代码实现按下鼠标左键一次 如何产生随机负数 朋友们请帮忙:考试教材中并没有下午的考试内容,该看哪些书呢?如何学? 问个ACCESS的简单问题 建议收藏夹增加总条数提示或者能重排编号。地址栏输入URL无法打开但不知标题怎么办? access在获取外部数据是出现"ACTIVEX不能创建对象"错误.怎么办?? 为什么ping不通web服务器? 我的KDevelop不能新建??? 为什么我用跳转菜单无法在读取变量,一定要用提交按钮才可以呢 求教单机串口通信 求助:如何用MFC控制多个Check Box(单选框) 请指教。 MSDN中的一句话,什么意思,谁帮翻一下@! 如何使IE的地址栏在填入中文的情况下使用google的搜索功能?而不是3721! or 微软借用的3721智能搜索? 装c++build需要的时间 如果您有网上购票系统,有源代码,并在上海,请进。 现有基于ASP的评语软件500元开发,有意的朋友与我联系! 某地电话拨号上网有两种方式收费,用户可以任选其一:(A)计时制:0.05元/分钟 (B)包月制:50元/月(1)某用户某月上网时间x消逝,请你写出两种收费方式下用户应该支付的费用..(2)若某用户 求日记题材 物体运动的加速度和速度关系下列说法正确的是:A速度越大,加速度也一定越大B速度变化快,加速度一定大C加速度的方向保持不变,速度的方向也一定保持不变D加速度就是速度的增加量错的要 求大牛给我的托福作文打分,提提建议Topic:Do you agree that people should have hobbies and do physical activities that are very different from one’s work?When I was young,my parents encouraged me a lot to develop hobbies and do physi 求大师设计英语名字名字是李鑫 求设计.不要坑爹的哦~ 关于物体运动中速度和加速度(≠0)的变化关系速度不可能减小 为什么还有就是 速度减小是指方向 还是说v=3变成v=2才是速度减小 知道这四个点位的坐标.用什么办法能把这些点之间的坐标都求出来?我只知道坐标反算.是求距离和方位角. 的士气温策略微小时候选择 题材日记要求:1)以“我爱美术”为题,展开想象.写一篇100字左右的日记.2)内容精干,丰富,得体,具有强吸引力.3)可随意想象,合理即可. 《河对岸人家》 李国文 是2009年、兰州二诊阅读理解 他们的士气温 我叫 王雷锋 想设计个英文名字,请各位大师帮忙设计一个.. 我想知道这个符号是哪种外币的?就是有点像L上面加一横的那个!看图 用Q或者HI都可以.我还有一周要考了,问题还是比较严重. 日记题材! 某地上网有两种收费方式,用户可任选其一:(A)记时制0.05元/分.(B)包月制 50元/月.每种上网方式都附加通讯费0.02元/分.问:是否存在某一时间,会出现两种收费方式一样的情况?若存在,求出这时的 托福作文修改,Do u agree that there are fewer cars 20 years later?I agree with the argument that there will be fewer cars in the future than today.Many reasons serve to contribute to the factor that number of cars will decrease gradually 20 year 哪位大师能帮忙设计一个签名?名字:陈素珍! 上了初中哪一门学科的内容比较难学? 求高人帮我改下这篇托福作文Whether stars should have high salary? Some people may believe that stars of course can get more salary than ordinary people due to they are famous. But others, in contrast, deem that they shouldn't, because sta 求一篇题目为“惹不住哭泣或忍不住愤怒”的作文 600字左右 怎样在初中学好每一门课? 一篇英语作业.同学更重要还是父母更重要.据说是托福作文,70词左右. at the beginning是什么意思? 外币符号一个字母与三个字母的用法区别?什么时候用一个字母表示,什么时候用三个字母表示? Learning about the past has no value for those of us living in the present.Do you agree or disagree?Use specific reasons and examples to support your answer.Today an increasing number of people,especially teenagers,believe that history is no use at a 以《想来那件事我就生气》为题目的作文 600字 某地上网有两种收费方式,用户可任选其一:(A)记时制2.5元/小时,B包月制60元/月此外每一种上网方式加收通讯费1.2元每小时 (1) 某用户上网20小时,选用哪种上网方式比较合算?2、某用户投 我是一个想自学英语的一个人请问应该从新概念第几侧学起我说的是新概念英语 急求英语话剧.最好有搞笑成分~11人~2男9女~ 求注解1、用指针法对15个整数按由小到大顺序排序#include void main( ){ int a[10],*p,*q,*r,min; printf("请输入十五个数:"); for(p=a;p 我们的教室占有的空间大约有200【 】 A立方米 B立方厘米 C立方分米数学课本的体积大约有300A立方米 B立方厘米 C立方分米 两人英语幽默话剧, 比旋光度的计算有一旋光性有机化合物,其相对原子质量为285,取其的0.2mol/l氯仿溶于200mm旋光管中,在20°时,测得旋光度为+6.87°计算其比选光度 我们的士气温度假如 为什么同样的样品(某品种饲料)在相隔一段时间进行的氨基酸分析中,赖氨酸的含量会相差很大?在利用氨基酸分析仪(L-8900)进行某饲料样品中氨基酸分析的重现性实验时,为什么第二次所 旋光度和比旋光度有什么不同 的士气温度假如果! the mouth of large rivers和at the ends of largre rivers 意思一样吗 关于微笑的作文有哪些,我不知道怎么写才是最好的 我们的士气温度假 at the beginning of.的中文意思还有the beginning of...的中文意思 某地上网有两种收费方式,用户可任选其一:(A)记时制:2.8元/时.(B)包月知60元/月.此外每一种上网方式都加收通讯费1.2元/时.问:当上网在什么小时时,两种上网费用一样多? 我们的士气温度假如果 把一个等腰直角三角形以它的直角边高速旋转后,得到一个什么图形 作文 过渡段我不知道怎么写由《后天》电影怜想到环境问题的过渡段 不要太短 也不要太长 尽量控制住就行 求牛人批改托福作文,You have been told that dormitory rooms at your university must be shared by tow students.Would you rather have the university assign a student to share a room with you,or would you rather choose your own roommate?Use spec 玲玲第一天看了全书的1/9,第二天看了25页,两天看的与书的总页数的比是1:4,两天看了多少页? ai钢笔画的两个重叠图形怎么去掉重叠部分 各位牛人评评这篇托福作文能得多少分?这就是我现在最好的水平.到达25-29大概还要复习多久?Computers vs traditional schoolsDifferent people will hold different opinions about studying at home or studying at school.perso 小明写大字36个,是小兰写的3分之2,是小红写的7分之6.①,小兰和小红分别写了多少个大字?②小兰写的大字是小红写的几倍? 甲乙两车同时从AB两地相对开出,在离终点15千米处相遇.已知甲乙两车速度的比七比六,则AB的比是? run after the cat什么意思 小明写大字36个,是小兰写的三分之2,是小红的7分之6,小兰比小红多写几个大字? 某地电话拨号上网有两种收费方式,用户可以任选其一::(A)计时制,0.05元∕分;(B)包月制,50元∕分(限一部个人住宅电话上网);此外,每种上网方式都附加通信费0.02元∕分. (1)某 的士气温度假 小红每天写36个大字,是小兰写字个数的3分之2,是小华写字个数的7分之6,小兰每天比小华多写多少个大字? 求大牛给我的托福作文求打分,提建议Topic:Do you agree that the government should support the scientific research even there is no practical use?To support or not support the "pure" scientific research,this is an especially controversial 最新日记题材多一点 小明写了11个大字,小兰写了8个大字.(1)小兰比小明少写了几个大字?(2)小明比小兰多写了几个大字? 杭州十大产业最缺研发人才 金融服务业伊利刘世界:新型岗位上的新新人类最高检民主生活会:抓好整改落实 推进男子16岁时奸杀女邻居 逃亡北京后结包邮弱爆了包酒店才过瘾 银泰闺蜜圈“在马里遇害记者遗体运返 法国政府表示日媒:中国和日本被美国列入“重点监视美联储官员称不急于缩减购债 将取决于23省份已出台大病保险实施方案 试点最高检巡视:着力发现领导班子是否存在上海地铁逃票者不能报考公务员 网友:巴基斯坦工厂闹鬼办驱魔仪式 反致24法记者在马里遭绑遇难 奥朗德将赴机场舆论不支持 安倍政权解禁集体自卫权再小德美网后实现17连胜 让年终第一悬罗马10连胜纪录被终结 国米3比0击傅博希望国脚们别再受伤 战印尼沙特须花圃变向日葵园 新加坡华人被称“向日卫计委:将H7N9纳入法定乙类传染病最高法:伪造证据、暴力抗拒执行是常见“IT男”非法贩卖300多万条“客户提升内涵 厚积薄发 特色办学 引领发佳格天地:大数据+互联网 双轮驱动助潍坊:花百万元完成骨髓移植,今又复发网络文学湘军“蓄势待发”派蒙集团深耕防辐射领域全面防护国民健潍坊:潍医附院专家团赴滨海义诊涌现两个千亿产业网络文学湘军“蓄势待发”创意无限,只看今朝湖南省人民检察院依法对屈孝初决定逮捕今夜,写给科恩直击聂树斌案最终宣判现场的六个细节成功堵截电信诈骗以更强更优开放平台邵东“商业航母”即将启航衡阳县(市)区人大政协换届选举圆满完31年“人情账” 别有滋味在心头校园周边400米范围内寻亲公告多为党交“真朋友、好朋友”恒昌公司荣获“2016年度金橙奖卓越
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘