vfp中api函数调用实例
- 格式:doc
- 大小:39.00 KB
- 文档页数:4
vfp中api函数调用实例
我们在vfp编程时,为了弥补vfp本身功能的不足,常常会用到win32api函数来对vfp 的功能进行扩展,例如取得系统信息、对注册表进行操作等,但由于win32api函数是c++的数据结构形式,在调用时与vfp的数据格式有所不同,因此在调用时往往会产生问题。下面,笔者就在vfp如何调用win32api函数,并就一些常用的win32api函数调用实例作一具体介绍。
一、vfp中调用win32api函数的格式
vfp中调用win32api函数的命令主要是declare-dll和clear dlls两个。
1.declare-dll 它用于注册外部windows 32位动态链接库(.dll)中的一个函数。
语法:
declare [cfunctiontype] functionname in libraryname [as aliasname]
[cparamtype1 [@] paramname1, cparamtype2 [@] paramname2, ...]
说明:
cfunctiontype 指定该函数返回值的类型,其类型代码如下:
short16位整数
integer32位整数
single32位浮点数
double64位浮点数
string字符串
functionname指定在要注册使用的32位函数名。注意functionname区分大小写。
如果该函数名与visual foxpro的保留字相同,应使用as参数另起别名。
in libraryname 指定该函数所在的外部动态链接库文件名,如果libraryname为win32api时,vfp将依次查找:kernel32.dll、gdi32.dll、user32.dll、mpr.dll及advapi32.dll
等动态链接库文件名。
as aliasname 为当api函数的名称与visual foxpro的保留字相同时,另取aliasname别名,另取的别名是不区分大小写的。
cparametertype1 [@] paramname1, cparametertype2 [@] paramname2, ...
指定传递给被调用的32位.dll函数的参数类型及参数名称。其类型代码如cfunctiontype,如果要以传址方法传递参数则应在参数名前加上@。
2. clear dlls 释放所有利用declare-dll命令所装入的动态链接库。
一旦申明win32api函数成功,就可以和一般函数一样用?xxx()、=xxx() 来使用。
二、vfp中常用win32api函数调用实例
1.利用win32api函数获取指定磁盘的卷标:
stor 0 to c—var,c—cd,c—qf
c—disk=′c:\′ &&指定磁盘
declare integer getvolumeinformation in win32api string @,string @,integer,;
integer @, integer @, integer @, string @, integer
xx=getvolumeinformation(c—disk,″ ″,20,@c—var,@c—cd,@c—qf,0,0)
clear dlls
返回值:
xx〈〉0 获取指定磁盘的卷标成功,反之则未成功。
c—var=指定磁盘的卷标,是个十进制的数值,与我们在dos下看到的16进制不同。
c—cd=系统规定的文件名每一部分的长度。
c—qf=文件名的大小写标志。
2.在vfp中利用wn32api函数调用outlook express给你的程序建立发送邮件的链接。
declare integer shellexecute in shell32.dll integer hwnd,;
string, string lpszfile, string, string, integer
*申明shellexecute函数,
lpszfile=′mailto:cfyns@′
*设定你需要发送的e-mail
=shellexecute(0,0,lpszfile,0,0,1)
*调用shellexecute函数
3.利用win32api函数,防止同一程序被重复执行。
利用win32api中的findwindow()函数取得窗口的handle(句柄),其返回值不等于0,则表示该exe文件已运行。
vfp代码如下:
declare integer findwindow in win32api string,string
local ctitle
ctitle=—screen.caption
if find—window(0,ctitle)〈〉0
=messagebox(″程序已运行,无需重复!″,48)
Endif
注意:findwindow()函数是取得窗口的caption,如果caption在程序的运行中已经改变,则达不到目的。
4.利用win32api函数,关闭或重新启动电脑。
declare integer exitwindowsex in user32.dll integer, integer
=exitwindowsex(1,1)
&&关闭系统
*=exitwindowsex(2,1)
&&重新启动系统
*=exitwindowsex(0,0)
&&进入登录者身份对话框
5.在vfp中利用wn32api函数获取当前所有逻辑驱动器。
利用getdrivetype、getlogicaldrivestrings函数,我们可以很快找到当前所有逻辑驱动器的根驱动器路径。下面介绍两种用法:
(1)利用getdrivetype函数:
declare integer getdrivetype in ″kernel32″ string
dgs=0
for i=65 to 90
vname=chr(i) +″:″
lx=getdrivetype(vname)
do case
case lx=2
dgs=dgs+1
wait wind ′这是个软盘′