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

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/ 上留言。
河南省洛阳市解放军外国语学院第三系 曹首光
实现画面的各种切换方法-VB资料 实现屏幕变暗的效果 -VB资料 实现图像切换效果 -VB资料 提取Win9x拷贝的动画-VB资料 一个图像滤光处理程序-VB资料 一个用VB5.0 实现的鼠标绘图程序 用VB6.0制作画图板 用VB6设计有趣的动画场景 用VB编程绘制网格图像 用VB绘制抛物线动画曲线 用VB绘制正弦动画曲线 用VB实现“百叶窗”的图形特效 用VB实现托盘动画图标 用Visual Basic 定制BMP文件 用Visual Basic的Move方法实现动画效果 用Visual Basic与MS-Draw开发通用作图软件 在VB中获取可执行文件及Windows 95快捷方式的图标 在VB中进行各种图形切换的方法 在VB中制作可滚动的图像显示 在图片上平滑移动文字 -VB资料 VB怎样使程序的标题条闪烁? VB制作图像的Mask图 CWinInetConnection-一个封装了WinInet API函数的类 -VB资料 MODEM通讯意外处理-VB资料 MsComm 文字传输-VB资料 PING一个IP地址(向它发送一个数据包并等待回应) -VB资料 SMTP协议简介 (Simple Mail Transfer Protocol) -VB资料 VB5.0 中远程数据库的访问 VB下如何编写CRC校验程序 Visual Basic 6中发送邮件的新方法 Visual Basic通信程序设计 请问?在B/S中,如果使用iNotes邮件系统,如何在首页中实现“新邮件”提示功能? 恐怕又是个没有人回答的问题,有谁对DevExpress中的TdxTreeList进行过继承? MASM6.x在哪里有下载? 如何获得TREEVIEW某个根结点下的所有子结点内容? 关于回收站的问题 怎么才能让HTML中的层显示在控件的上面阿!!! 我没有学过C,不过学过C++,要考高程是不是要补C? 菜鸟请教,高手请进! 观(baiyongchun (粒子))的文章:《为什么没有人开发脱离操作系统的应用程序?》有感! 如何用日期来给文件取名? 問一個簡單的問題:ByVal,byRef兩個關鍵字的用處的詳細說明。 水晶报表中打印时无法打印多份 请各位帮忙 有哪位仁兄知道,如何在页面中创建一个可拖动的层?请教了! 请问哪有servlet包的源代码? 取图片发生了错误(代码内,修改了一下代码就报错了),高人指点啊 哪位朋友可以帮忙将这段PHP的代码转成ASP?代码见内,谢谢。 急救 少有问问题,来者有份! SmartUpload组件的Request有问题啊 db中知道如何知道一个已知名字的procedure存在于哪个package中? Windows2000的计算机名的命名规则是什么? 关于microsoft speech sdk5.1的问题?高分请教。 到底有没有人懂 菜鸟提问~~! 关于时钟中断的简单问题!! 我的硬盘完了。。。。。。。。。。。。。。。救救我呀。。。。。。。。。 关于JTree的图标 用jdk能否进行java编程,运行java程序? 如何用代码触发另外一个按钮的click事件!!!!!!!!! 奇怪的问题, 在线等待 请教:别名是中文速度很慢 请教dbgrid问题 请教:如何在JSP中实现媒体播放 如何使用asp程序反复提交一个页面 能不能实现powerpoint中实现同时只播放一个文档? 求SQL SERVER 2000 的东京攻略 请问怎么能自动升级 我是来找我MM的..................................... 动态生成的Tree怎么响应自定义的动作 哪里可以下载到asp的自助建站程序? COM初学者,请给点建议,谢谢!up有分 JBuilder9 的声音可以更改么? 再问一个关于rave的问题:怎么用程序在rave designer上画网格线,就是如何画直线??? 操作系统装好了,网卡却不能用了,急呀!!在线等待! asp.net中怎么判断request的一个值是否为空? ???数据显示问题??? 请教SOCKET编程中遇到的一个问题 如何得到程序是在运行时还是在设计状态? 求救!(送分) 子报表预览问题???????? 问一个关于多线程操作文件的问题(在线等待) 栩栩如生近义词是什么, 物有甘苦,尝之者识.. 衅组什么词 一道英语选择题,要不然不懂!我目标是清华,希望大家能多帮帮我的短处,my father ,who is strict ___his work ,is quite strict ___me as well .A.with about B.about with C.about about D.with with 清华赋中的“少长咸集”是什么意思 清华赋中的”序属季春“是什么意思‘谢谢! 我想学口译,哪家比较好? 栩栩如生的近义词 想要学口译都要具备什么条件 栩栩如生近义词 学口译哪里好? 篠田麻里子圆空姐梦 助阵桃子航空新航中国品牌闪耀约堡国际车展(组图)土耳其总理:只有中国退出才可能购别国南海问题不能仅靠“海洋法公约”加拿大女星完美天使面容(组图)中国海警4船编队28日在中国钓鱼岛领校园摄影:日本少女萌动的青春韩国欲购美112枚爱国者导弹日本著名作家新书《混浴和日本史》揭秘澳大利亚华人金合欢艺术团悉尼举办中国希特勒未死一直活到1962年?历史学乌克兰局势紧张令国际油价21日上涨伦敦股市股指21日上涨0.23%纽约商品交易所黄金期货市场4月黄金期新疆维吾尔自治区和田地区民丰县M3.西安天然气限购 每户每三个月150方责编:杨子岩邮箱:guogihwb@清污护海祝你们在中国度过愉快时光春回大地 万物“耕”新(焦点瞬间)习近平信贺中国残基会30周年责编:尹婕 邮箱:travelwed旧货铺魔域同盟天妖非妖幻海如梦烈焰魔都女王战记只有我知道的机娘无限之混沌星神风魂行武侠股票系统无缘宗大南门旅游艋舺旅游平型关战役遗址旅游赵武灵王墓旅游白登山旅游维吾尔古村旅游万象洞旅游佛坪自然保护区旅游东湖磨山园艺公园旅游小嶝岛旅游藏龙百瀑旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘