您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 商业计划书 > vfp中api函数调用实例
vfp中api函数调用实例我们在vfp编程时,为了弥补vfp本身功能的不足,常常会用到win32api函数来对vfp的功能进行扩展,例如取得系统信息、对注册表进行操作等,但由于win32api函数是c++的数据结构形式,在调用时与vfp的数据格式有所不同,因此在调用时往往会产生问题。下面,笔者就在vfp如何调用win32api函数,并就一些常用的win32api函数调用实例作一具体介绍。一、vfp中调用win32api函数的格式vfp中调用win32api函数的命令主要是declare-dll和cleardlls两个。1.declare-dll它用于注册外部windows32位动态链接库(.dll)中的一个函数。语法:declare[cfunctiontype]functionnameinlibraryname[asaliasname][cparamtype1[@]paramname1,cparamtype2[@]paramname2,...]说明:cfunctiontype指定该函数返回值的类型,其类型代码如下:short16位整数integer32位整数single32位浮点数double64位浮点数string字符串functionname指定在要注册使用的32位函数名。注意functionname区分大小写。如果该函数名与visualfoxpro的保留字相同,应使用as参数另起别名。inlibraryname指定该函数所在的外部动态链接库文件名,如果libraryname为win32api时,vfp将依次查找:kernel32.dll、gdi32.dll、user32.dll、mpr.dll及advapi32.dll等动态链接库文件名。asaliasname为当api函数的名称与visualfoxpro的保留字相同时,另取aliasname别名,另取的别名是不区分大小写的。cparametertype1[@]paramname1,cparametertype2[@]paramname2,...指定传递给被调用的32位.dll函数的参数类型及参数名称。其类型代码如cfunctiontype,如果要以传址方法传递参数则应在参数名前加上@。2.cleardlls释放所有利用declare-dll命令所装入的动态链接库。一旦申明win32api函数成功,就可以和一般函数一样用?xxx()、=xxx()来使用。二、vfp中常用win32api函数调用实例1.利用win32api函数获取指定磁盘的卷标:stor0toc—var,c—cd,c—qfc—disk=′c:\′&&指定磁盘declareintegergetvolumeinformationinwin32apistring@,string@,integer,;integer@,integer@,integer@,string@,integerxx=getvolumeinformation(c—disk,″″,20,@c—var,@c—cd,@c—qf,0,0)cleardlls返回值:xx〈〉0获取指定磁盘的卷标成功,反之则未成功。c—var=指定磁盘的卷标,是个十进制的数值,与我们在dos下看到的16进制不同。c—cd=系统规定的文件名每一部分的长度。c—qf=文件名的大小写标志。2.在vfp中利用wn32api函数调用outlookexpress给你的程序建立发送邮件的链接。declareintegershellexecuteinshell32.dllintegerhwnd,;string,stringlpszfile,string,string,integer*申明shellexecute函数,lpszfile=′mailto:cfyns@163.net′*设定你需要发送的e-mail=shellexecute(0,0,lpszfile,0,0,1)*调用shellexecute函数3.利用win32api函数,防止同一程序被重复执行。利用win32api中的findwindow()函数取得窗口的handle(句柄),其返回值不等于0,则表示该exe文件已运行。vfp代码如下:declareintegerfindwindowinwin32apistring,stringlocalctitlectitle=—screen.captioniffind—window(0,ctitle)〈〉0=messagebox(″程序已运行,无需重复!″,48)Endif注意:findwindow()函数是取得窗口的caption,如果caption在程序的运行中已经改变,则达不到目的。4.利用win32api函数,关闭或重新启动电脑。declareintegerexitwindowsexinuser32.dllinteger,integer=exitwindowsex(1,1)&&关闭系统*=exitwindowsex(2,1)&&重新启动系统*=exitwindowsex(0,0)&&进入登录者身份对话框5.在vfp中利用wn32api函数获取当前所有逻辑驱动器。利用getdrivetype、getlogicaldrivestrings函数,我们可以很快找到当前所有逻辑驱动器的根驱动器路径。下面介绍两种用法:(1)利用getdrivetype函数:declareintegergetdrivetypein″kernel32″stringdgs=0fori=65to90vname=chr(i)+″:″lx=getdrivetype(vname)docasecaselx=2dgs=dgs+1waitwind′这是个软盘′caselx=3dgs=dgs+1waitwind′这是个硬盘′caselx=4dgs=dgs+1waitwind′这是个可移去式驱动器或网络驱动器′caselx=5dgs=dgs+1waitwind′这是个光盘′caselx=6dgs=dgs+1waitwind′这是个ram盘′endcendfwaitwind′本机共有:′+str(dgs)+′个驱动器′(2)利用getlogicaldrivestrings函数:declareintegergetlogicaldrivestringsin″kernel32″long,string@cccc=spac(81)=getlogicaldrivestrings(81,@cc)*cc中返回了这样的字符串″a:\c:\d:\e:\f:\″每个名字都用一个null字符分隔,在最后一个名字后面用两个null表示中止。x=(len(allt(cc))-1)/4&&x中包含本机逻辑驱动器个数*如果你想知道每个具体的驱动器名,则写如下代码:dimedve(x)fori=1toxdve(i)=subs(cc,1,3)cc=subs(cc,5)endf*这样在dve这个数组里就是每个驱动器的盘符及″:\″了。*如果你还想知道每个驱动器的类型,则再添加和改写如下代码:declareintegergetdrivetypein″kernel32″stringdimedve(x,2)fori=1toxdve(i,1)=subs(cc,1,3)lx=getdrivetype(dve(i,1))docasecaselx=2dve(i,2)=′软盘′caselx=3dve(i,2)=′硬盘′caselx=4dve(i,2)=′可移去式驱动器或网络驱动器′caselx=5dve(i,2)=′光盘′caselx=6dve(i,2)=′ram盘′endccc=subs(cc,5)endfwin32api功能调用的函数还很多,比如像操作注册表、mci(mediacontrolinterface)媒体控制接口等,有的是因为这方面介绍的资料较多,有的是调用过于烦琐,所以笔者就不准备继续介绍下去。文中所有实例,都在中文windows98、microsoftvisualfoxpro6.0下测试通过。
本文标题:vfp中api函数调用实例
链接地址:https://www.777doc.com/doc-2866237 .html