vfp中api函数调用实例

合集下载

API函数在VFP中的三则应用

API函数在VFP中的三则应用
_
UI ,e srn ! - D'r gtig,- )
∥ 设置 ii n 文件 中 i tl s l小节 的 rg 1 避 免下次运 行时再次注 册数 na e= ,
据源
ed f n i
根据 以上 思路, 可得到应用程序 O e pn事件代码 如下 :
itgr O B jnt ne e D C i
维普资讯
2 6 8月 0 年 0
电 脑 学 习
第4 期
AI P 函数在 F V P中的三则应用
张 宏’
摘 要 介 绍 A I 数 在 V P中三 则 应 用 : 置 屏 幕 分 辨 率 . 繁 体 字 符 的 转 换 。 闭 操 作 系统 。 P函 F 设 简 关 关 键 词 V P A 1 F P

Die ̄es lg, \ ND WSss m3 k tct2dl) r r rgtn lC:WI O  ̄ t 2 xbj .l v . r " ye 3
Re ity e ( gsrS t HKEY C URREN T
_ _
Xdb .  ̄ s o ci t t. nie
Drvrd , g on 。5) iel "r UL gl e 2 Re ity e ( gsr S t HK EY C 也 N I S R sf 8e0 b d ciie t。 U 1 U E \ t r、- d0 b .  ̄ s _ 0w d nt
i e i e e c a a t r sr g a d ta i o a h n s a a tr s i g o e a n y t m h t n d w i f d Chn s h r ce t n n r d t n l C e e Ch r ce t n ,p r t g s s i i i r i e s ut g o n. i Ke wo d y r VF AP P I Re o u o s lt n i S mp i e d Tr dto a i n s h r ce i l id An a i n l Ch e e C a a t r f i S utn o n Op r t g S se h t g D w e a n y t m i i

在VFP中调用API实现拨号上网

在VFP中调用API实现拨号上网

在Visual FoxPro 中实现拨号上功能,难点在于如何调⽤相应的WINDOWS API函数。

与拨号络相关的⼏个API函数需要复杂的结构类型的参数,在VFP帮助⽂件“程序员指南—访问API”中有相关说明,但较为简单,不⾜以解决问题,在此作进⼀步探讨。

希望通过本⽂能解决实现拨号上的实际问题,更希望通过这个例⼦帮助了解如何在VFP环境下调⽤参数复杂的API函数,以扩展VFP的应⽤。

因篇幅所限,本⽂仅论述关键部分,相关细节说明请参阅参考⽂件。

WINDOWS API中RasDial函数可实现拨号上功能,可在MSDN帮助中查到,其参数简述如下:DWORD RasDial( // 返回四字节整数,对应VFP的INTEGER型变量 LPRASDIALEXTENSIONS lpRasDialExtensions, // 指针,置NULL即可 LPCTSTR lpszPhonebook, // 指针,置NULL即可 LPRASDIALPARAMS lpRasDialParams, // 指针,指向参数结构变量RASDIALPARAMS DWORD dwNotifierType, // 四字节整数,置0即可 LPVOID lpvNotifier, // 指针,置NULL即可 LPHRASCONN lphRasConn // 指针,指向远程访问连接句柄HRASCONN。

 // 调⽤RasDial前需先置HRASCONN为NULL); 其中结构RASDIALPARAMS描述如下:typedef struct _RASDIALPARAMS { DWORD dwSize; // 4字节,值为本结构占⽤总字节数 // 调⽤此函数前必须给此变量赋值 TCHAR szEntryName[RAS_MaxEntryName + 1]; // 257字节,拨号络电话簿中连接名, // 为空则在第⼀个MODEM端⼝上,⽤下述电话号码、⽤户名、密码建⽴连接 TCHAR szPhoneNumber[RAS_MaxPhoneNumber + 1]; // 129字节,电话号码 TCHAR szCallbackNumber[RAS_MaxCallbackNumber + 1]; // 129字节,回叫号码,置空 TCHAR szUserName[UNLEN + 1]; // 257字节,⽤户名 TCHAR szPassword[PWLEN + 1]; // 257字节,密码 TCHAR szDomain[DNLEN + 1] ; // 16字节,域名,置空 #if (WINVER >= 0x401) // 缺省情况下,WINVER=Ox400,⽆以下两项 DWORD dwSubEntry; DWORD dwCallbackId; #endif} RASDIALPARAMS; 以上RAS_MaxEntryName等预定义值,可从RAS.H与LMCONS.H中查出。

vfp动态链接库的调用方法学习

vfp动态链接库的调用方法学习
动态链接库DLL是Windows 最重要的组成要素,它是应用程序外部的、可以从应用程序进行调用的过程库。在 VFP 中调用动态链接库,就可以大大加强VFP 的功能,特别是一些VFP 自身不能实现的功能。本文以建立一个闪烁的 窗口为例介绍一下VFP 中动态链接库的调用方法。 要调用动态链接库,先使用DECLARE命令说明要调用的函数,也就是使用前必须注册一下外部32动态链接库中 的函数。其语法如下: DECLARE [函数返回值类型]函数名IN 库名[AS 别名][参数1类型][@][参数1名] [,参数2类型][@][参数2名]…… 假定函数的返回值为INTEGER(32整数 值),闪烁窗口的函数为:FlashWindow(), 其调用说明如下: DECLARE INTEGER FlashWindowIN win32api integer hWnd ,integer Bool 清除DLL时用:clear dlls 具体实现方法如下: 建立表单,加入ti mer 控件和命令按 钮。属性如下: 控件属性值 ti mer1Interval 200 visable false CommandButton1Caption 退出 方法如下: form1.Init DECLARE INTEGER FlashWindow IN win32api integer hWnd ,inte ger Bool set libraryto "d :\vfp\foxtools .fll" &&调用foxtools .fll 库中的_WhToHwnd()和_WonTop()函数以得到 窗口句柄 Ti mer1.ti mer =FlashWindow(_WhToHwnd(_WOnTop()),1) CommandButton1.click clear dlls thisform.release

VFP调用Windows API函数

VFP调用Windows API函数

VFP调用Windows API函数正式开始:我想你可能经常看过如下这种语句,我不得不在这里重复地说一遍DECLARE INTEGER SetWindowText IN user32;INTEGER hWnd,;STRING lpStringHwnd=thisform.hwndcustomtext=space(250)lnlen=len(customtext)SetWindowText(Hwnd,customtext, lnlen)第一个语句就是一般的api定义,意思就是注册一个user32.dll动态库中的函数SetWindowText ,接受参数integer类型hwnd, string 类型h的sWindowText 参数,,返回值为intger ,这是参数按值传递的一部分,第三个语句就是调用注册的api函数了,看起来和我们用普通的foxpro函数并无区别,只是多了一步注册的步骤.我们再看看另一种定义,按引用传递的的方式,看到什么不同了吗?第一个语句就是一般的api定义,意思就是注册一个user32.dll动态库中的函数SetWindowText ,接受的参数是integer类型hwnd, string 类型h的sWindowText , INTEGER 类型的cch,返回值为intger类型DECLARE INTEGER GetWindowText IN user32;INTEGER hwnd,;STRING @lpString,;INTEGER cchHwnd=thisform.hwndHwnd=thisform.hwndStext =space(250)lnlen=250SetWindowText(Hwnd,@customtext, lnlen)没错,多了一个伊妹儿的符号:@,注意调用的时候也得加入该符号,此符号的意思是说参数sWidowText是按引用传递的,为什么要这么用呢,原因是我们要用函数GetwindowText 的得到一个窗体(Form)标题.GetwindowText 的职责就是将我们要的值填入sWidowText中,如果调用成功你就会看到sWidowText的值已经改变.此处你要明白所谓的按引用传递有如C中的指针,我们只是该内容的地址为参数传给GetwindowText,它直接在地址指向的内存单元上修改数据.所以我们才可能看到sWidowText值在调用GetwindowText()函数就发生了改变。

VFP调用API实现代码模拟鼠标键盘动作

VFP调用API实现代码模拟鼠标键盘动作

VFP调用API实现代码模拟鼠标键盘动作*--VFP调用API实现代码模拟鼠标.键盘动作*--模拟键盘协作,如 Ctrl+VDeclare keybd_event In Win32API Short bVk,Short bScan,Integer dwFlags, Integer deExtraInfokeybd_event(17, 0, 0, 0)keybd_event(Asc('V'), 0, 0, 0)keybd_event(Asc('V'), 0, 2, 0)keybd_event(17, 0, 2, 0)*或#Define VK_CONTROL 0x11#Define KEYEVENTF_KEYUP 0x02Declare Long keybd_event In "user32" Integer bVk , Integer bScan, Long dwFlags, Long dwExtraInfoClear Typeaheadkeybd_event(VK_CONTROL, 0, 0, 0) && 模拟按下 Ctrl 键keybd_event(Asc('V'), 0, 0 ,0) && 模拟按下 V 键keybd_event(Asc('V'), 0, KEYEVENTF_KEYUP, 0) && 松开 V 键keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0) && 松开 Ctrl 键* KEYEVENTF_KEYUP = &H2 ' Release key* VK_RETURN = &HD 'enter* VK_SHIFT = &H10 'Shift* VK_CONTROL = &H11 'Ctrl* VK_CAPITAL = &H14 'capslock* VK_ESCAPE = &H1B 'escape*--模拟鼠标动作,如单击左键MOUSEEVENTF_LEFTDOWN=0x2MOUSEEVENTF_LEFTUP=0x4MOUSEEVENTF_MIDDLEDOWN=0x20MOUSEEVENTF_MIDDLEUP=0x40MOUSEEVENTF_MOVE=0x1MOUSEEVENTF_ABSOLUTE=0x8000MOUSEEVENTF_RIGHTDOWN=0x8MOUSEEVENTF_RIGHTUP=0x10Declare mouse_event In Win32API Integer dwFlags,Integer dx,Integer dy,Integer cButtons,Integer dwExtraInfo*在鼠标坐标系统中,不管什么分辨率屏幕在水平和垂直方向上均匀分割成65535×65535个单元=mouse_event(MOUSEEVENTF_ABSOLUTE+MOUSEEVENTF _MOVE,10000,10000,0,0) &&移动鼠标到绝对位置10000,10000 =mouse_event(MOUSEEVENTF_LEFTDOWN+MOUSEEVENT F_LEFTUP,0,0,0,0) &&单击左键(按下再松开的组合)*=mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0)*=mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0)'--以下为VB模拟鼠标的说明及例子'-------------------------------------------'' 模拟鼠标的左键单击和右键单击''-------------------------------------------''程序说明:''本例采用API函数实现模拟的鼠标事件,程序运行后会''产生十分有趣的效果。

用VFP为可视类增添绘图功能

用VFP为可视类增添绘图功能

用VFP为可视类增添绘图功能Visual foxpro中提供了基于 _Screen和表单窗口的绘图方法,如用Pset、Line画点、线等。

然而感到其方法较有限,如有时需绘制圆弧、扇形或想对多边形填充,却发现Visual Foxpro可视类未提供相应的方法。

现笔者找到两种解决方法:解决方法之一,可用控件自身的Pset及Point方法根据图形学基本算法设计子程序,该方法速度慢得让人无法忍受且效果不好。

解决方法二,调用Windows API函数。

Windows执行过程中常常通过动态连接库(DLLs)支持其所需的许多功能。

这些动态函数库加载在内存中根据需要与用户程序进行连接。

API 库中有丰富的图形操作函数。

调用API函数有许多优点:功能全、速度快、程序代码小。

有关访问API函数的文章已不少,这里不再重复。

然而使用API函数在窗口或设备中绘图时,必须得到该窗口或设备的句柄HDC。

在Visual Foxpro参考函数中却找不到获得HDC的方法,虽然可用API中的GetDc函数获得某窗口的HDC。

但该函数又需用到窗口句柄作参数。

如何获得窗口句柄呢?API函数(如:GetActiveWindow, GetWindow等)直接返回的是整个应用程序窗口句柄,而用户窗口一般是VFP应用程序中的一个文档窗。

其实在vfp中返回用户窗口一个很方便的方法是通过FOXTOOLS.FLL库中WOnTop和WhToHwnd函数。

上述函数语法如下:WHANDLE WonTop()*返回用户使用的活动窗口WHandle HWND WhToHwnd(WHandle)*返回相应的窗口句柄hWnd。

HDC GetDC(hWnd)*返回指定窗口hWnd的设备句柄hDC 有了设备句柄调用绘图函数则很容易,例如:画矩形的API 函数语法如下:BOOL Rectangle(hDC,x1,y1,x2,y2) 其中x1,y1,x2,y2为矩形对角线的x,y 坐标使用这些API函数绘图需注意几点:1.API函数使用前需用declare声明,另外应注意函数名称大小写(具体用法见文后程序)。

VFP中调用其他应用程序的方法

VFP中调用其他应用程序的方法

VFP中调用其他应用程序的方法在VFP (Visual FoxPro) 中,要调用其他应用程序,可以通过以下几种方法实现:1. 使用 Shell 函数调用外部可执行文件:Shell 函数用于在 Windows 中启动一个新的进程,并执行指定的可执行文件。

可以使用 Shell 函数调用其他应用程序,然后传递需要的参数。

例如,要启动记事本程序(notepad.exe),可以使用以下代码:```foxShell("notepad.exe")```要在调用外部应用程序时传递参数,可以将参数作为字符串拼接到可执行文件路径的后面。

例如,要启动记事本程序并打开一个指定的文本文件,可以使用以下代码:```foxShell("notepad.exe C:\path\to\file.txt")```2. 使用 CreateObject 函数创建并操作外部应用程序的 COM 对象:CreateObject 函数用于创建和操作 COM 对象。

可以使用CreateObject 函数创建其他应用程序的 COM 对象,然后调用其方法和属性。

要使用该方法,需要知道外部应用程序的 ProgID 或 ClassID,来创建对应的 COM 对象。

例如,要创建并操作 Microsoft Excel 应用程序的COM 对象,可以使用以下代码:```foxoExcel = CreateObject("Excel.Application")oExcel.Visible = .T.```在通过COM对象调用其他应用程序时,可以使用COM对象的方法和属性来实现所需的功能。

3. 使用 ShellExecute 函数调用外部应用程序:ShellExecute 函数用于在 Windows 中执行一个外部应用程序,类似于 Shell 函数。

不同之处在于,ShellExecute 函数支持更多的参数选项,包括打开方式、工作目录、参数等。

多媒体API函数在VFP中应用...

多媒体API函数在VFP中应用...

多媒体API函数在VFP中应用...多媒体API函数在VFP中应用[ 2005-09-28 17:16:44 | 作者: 花狐狸 ]: | |在Windows中有一个动态连接库文件Winmm.dll,在这个文件中提供了100多个具有多媒体处理功能的API函数,这些函数大多为低级的程序接口,其中以wave开头的函数用来处理语音,以modi开头的函数用来处理音乐合成等。

常用的与MCI有关的高级API函数有mciExecute函数、mciSendString函数、mciGetErrorString函数,把MCI指令字符串作为实参传送给API函数,就可以控制多媒体设备。

- mciExecute函数用于执行MCI指令,如果MCI指令不能执行,则显示出错信息消息框。

调用格式:= mciExecute("MCI指令字符串")在VFP中使用该函数方式:Declare integer mciExecute in Winmm.dll string cMCIString 例:打开一个CD设备,播放第一首曲目30秒,然后停止并关闭设备。

mciExecute("Open CDAudio alias CD")mciExecute("Play CD From 1:0000 To 1:00:30 Wait")mciExecute("Stop CD")mciExecute("Close CD")- mciSendString函数用于把指令字符串传送给MCI。

调用格式:= mciSendString("MCI指令字符串",返回字符串,返回长度,句柄)在VFP中使用该函数方式:Declare integer mciSendString in Winmm.dll string cMCIString,;string @cRetString,;integer nRetLength,;integer hInstancecRetString = Space(80)nRetvalue = mciSendString(cMCIcmd.@RetString,Len(cRetString),0) 参数描述:cMCIcmd MCI指令字符串cRetString 定义的缓冲区nRetvalue 函数执行后的返回值- mciGetErrorString函数在执行mciSendString函数后,如果发生错误,将返回一个错误代码,使用该函数可以获取错误代码所表示的含义。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 ′这是个软盘′
case lx=3
dgs=dgs+1
wait wind′这是个硬盘′
case lx=4
dgs=dgs+1
wait wind′这是个可移去式驱动器或网络驱动器′
case lx=5
dgs=dgs+1
wait wind′这是个光盘′
case lx=6
dgs=dgs+1
wait wind′这是个ram盘′
endc
endf
wait wind ′本机共有:′+str(dgs)+′个驱动器′
(2)利用getlogicaldrivestrings函数:
declare integer getlogicaldrivestrings in ″kernel32″ long, string @cc
cc=spac(81)
=getlogicaldrivestrings(81,@cc)
*cc中返回了这样的字符串″a:\ c:\ d:\ e:\ f:\ ″每个名字都用一个null字符分隔,在最后一个名字后面用两个null表示中止。

x=(len(allt(cc))-1)/4
&&x中包含本机逻辑驱动器个数
*如果你想知道每个具体的驱动器名,则写如下代码:
dime dve(x)
for i=1 to x
dve(i)=subs(cc,1,3)
cc=subs(cc,5)
endf
*这样在dve这个数组里就是每个驱动器的盘符及″:\″ 了。

*如果你还想知道每个驱动器的类型,则再添加和改写如下代码:declare integer getdrivetype in ″kernel32″ string
dime dve(x,2)
for i=1 to x
dve(i,1)=subs(cc,1,3)
lx=getdrivetype(dve(i,1))
do case
case lx=2
dve(i,2)=′软盘′
case lx=3
dve(i,2)=′硬盘′
case lx=4
dve(i,2)=′可移去式驱动器或网络驱动器′
case lx=5
dve(i,2)=′光盘′
case lx=6
dve(i,2)=′ram盘′
endc
cc=subs(cc,5)
endf
win32api功能调用的函数还很多,比如像操作注册表、mci(media control interface)媒体控制接口等,有的是因为这方面介绍的资料较多,有的是调用过于烦琐,所以笔者就不准备继续介绍下去。

文中所有实例,都在中文windows 98、microsoft visual foxpro 6.0下测试通过。

相关文档
最新文档