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函数后,如果发生错误,将返回一个错误代码,使用该函数可以获取错误代码所表示的含义。

如何用VFP调用API

如何用VFP调用API
*以最大化窗口方式打开IE,并进入在线影院ShellExecute(0,“open",“",0,0,1)
二、 打开、打印WORD文档
*若要打印文档,则将operate赋值为“print"
operate=“open"
*打开hello.doc文档
ShellExecute(0,operate,“c:\my documents\hello.doc",0,0,1)
三、 带参调用EXE文件
*下列语句将运行记事本程序,并打config.sys进行编辑
ShellExecute(0,“open",“notepad.exe",“config.sys",“c:\",1)
FunctionName :调用函数的名称。它是大小写敏感的。
LibraryName:调用函数的所在地。它一般是一DLL文件名。
cParameterType1 [@] ParamName1, cParameterType2 [@] ParamName2, :当对函数的调用属带参调用时,就应该申明参数的类型及名称。
以上便是ShellExecute常见的几种具体用途,怎么样,没想到在VFP中也能够这样容易地操作各种各样的文件吧!试试看,你肯定能够找到ShellExecute更加多的用途。
(四川 周鸣扬)
VFP中操作多种文件
(07/19/2000)
做为一种数据处理软件,VFP在使用上的简洁是人所共知的。在使用VFP进行应用程序开以时,有时会涉及到一些非数据处理方面的内容,比如在VFP中打开WORD文档、EXCEL图表、利用OE收发电子邮件,这些功能又恰恰是VFP的弱项。通常情况下,我们处理这些问题的方法是使用OLE(现称之为ActiveX)技术来完成。但是,在VFP中要熟练操作OLE对象,又是一件更麻烦的事情。拿用VFP接入互联网来说,你可以在VFP的表单中加入Microsoft Web浏览器控件,但是如果没有专业的技术文档,你要想顺利地使用浏览器控件,这基本上是不可能的。有没有一种更简单的办法来实现上述功能呢?有的。

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

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

VFP中调用其他应用程序的方法在用VFP进行应用程序设计中,经常需要调用其他的应用程序。

这时候我们立即会想到RUN命令。

使用RUN命令只需知道应用程序的文件名及其路径即可。

下面的示例是以最大化方式启动Windows目录下的图画板程序并同时打开c:\windows\Bubbles.bmp文件:RUN/n3 C:\Windows\Pbrush.exe c:\windows\Bubbles.bmp RUN命令的参数用法可以参考Visual FoxPro的帮助文件。

但是令人失望的是,在实际开发时我们常常无法确定所需要启动的应用程序的文件名及其安装的路径。

比如我们需要启动用户机器上的浏览器并连接到某一个网址,该机器可能安装的是IE,也可能是NetScape,还有可能是其他的浏览器软件,安装的路径更是无从确定。

下面给出我在工作中找到的两种解决方法,这两种方法都是通过Win32 API函数来解决问题,因此其解决思路也可以用到其他编程语言中去。

(一)从注册表中获取被调用软件的名称及路径。

我们只需要提供被调用的软件所处理的文件类型(由文件扩展名来确定),即可通过查找注册表中该软件注册的可以处理的文件类型的数据项来得到该软件的文件名及安装路径。

*主函数PROCEDURE lookregParameter filetype && 文件类型* 申明要用到的API 函数DECLARE Integer RegOpenKey IN Win32API ; Integer nHKey, String @cSubKey,Integer @nResultDECLARE Integer RegCloseKey IN Win32API ; Integer nHKeyDECLARE Integer RegQueryvalueEx IN Win32API ; Integer nHKey, String lpszvalueName,Integer dwReserved,;Integer @lpdwType, String @lpbData,Integer @lpcbData#DEFINE HKEY_CLASSES_ROOT-2147483648#DEFINE C_EXTNOFOUND_LOC "查找失败!"LOCAL cExtn,cAppKey,cAppName,nErrNumLOCAL oReg,regfilecAppKey = ""cAppName = ""nCurrentKey = 0nErrNum =GetAppPath(filetype,@cAppKey,@cAppName)* 确保去掉可执行文件后的参数(如: C:\EXCEL\EXCEL.EXE /e)IF ATC(".EXE",m.cAppName) #0m.cAppName= ALLTRIM(SUBSTR(m.cAppName,1,ATC(".EXE",m.cAppName)+3)) IF ASC(LEFT(cAppName,1))=34&& 去掉长文件名前多出的"字符m.cAppName = SUBSTR(m.cAppName,2)ENDIFENDIFRetu LOWER(m.cAppName)ENDPROC* 打开注册表PROCEDURE OpenKeyLPARAMETER cLookUpKeyLOCAL nSubKey,nErrCodenSubKey = 0m.nRegKey = HKEY_CLASSES_ROOTnErrCode = RegOpenKey(m.nRegKey,m.cLookUpKey,@nSubKey) nCurrentKey = m.nSubKeyENDPROC* 关闭注册表PROCEDURE CloseKey=RegCloseKey(nCurrentKey)nCurrentKey =0ENDPROC* 查询注册表PROCEDURE GetKeyvalueLPARAMETER cvalueName,cKeyvalueLOCAL lpdwReserved,lpdwType,lpbData,lpcbData,nErrCodeSTORE 0 TO lpdwReserved,lpdwTypeSTORE SPACE(256) TO lpbDataSTORE LEN(m.lpbData) TO m.lpcbDatam.nErrCode=RegQueryvalueEx(nCurrentKey,m.cvalueName,;m.lpdwReserved,@lpdwType,@lpbData,@lpcbData) m.cKeyvalue = LEFT(m.lpbData,m.lpcbData-1) ENDPROCPROCEDURE GetAppPathLPARAMETER cExtension,cExtnKey,cAppKey LOCAL cOptNamecOptName = ""* 得到要打开的文档在注册表中的名称=OpenKey("."+m.cExtension)=GetKeyvalue(cOptName,@cExtnKey)=CloseKey()RETURN GetApplication(cExtnKey,@cAppKey)ENDPROC* 得到应用程序的安装路径及名称PROCEDURE GetApplicationPARAMETER cExtnKey,cAppKeyLOCAL cOptNamecOptName = ""=OpenKey(m.cExtnKey+"\Shell\Open\Command")=GetKeyvalue(cOptName,@cAppKey)=CloseKey()ENDPROC---- 在使用这段程序时,使用如下格式的语句:---- fullpath=lookreg("doc") && 返回打开doc 文件的软件名及安装路径----灵活运用该段程序,可以大大丰富我们在软件中的表现能力,例如应用软件的菜单中都有一项“关于本软件”的功能,该功能调用的表单一般用来显示有关系统资源及软件版权的信息。

[定稿]VFP绘图功能

[定稿]VFP绘图功能

用VFP为可视类增添绘图功能/139/36139.shtml分享到:我要吐槽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()*返回用户使用的活动窗口WHandleHWND 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调用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中调用其他应用程序的方法

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

VFP中调用其他应用程序的方法在Visual FoxPro(VFP)中,可以通过两种方式调用其他应用程序,包括使用Shell函数和使用OLE Automation。

一、使用Shell函数调用其他应用程序Shell函数是VFP中一个非常常用的函数,可以用于在操作系统的命令行中执行特定的命令或启动其他应用程序。

下面是一些使用Shell函数调用其他应用程序的示例:1.打开一个应用程序:```foxproShell("C:\Program Files\Internet Explorer\iexplore.exe")```上述代码会在系统中打开Internet Explorer浏览器。

2.打开一个文件或文件夹:```foxproShell("explorer.exe C:\path\to\folder")```上述代码会在资源管理器中打开指定的文件夹。

3.执行一个可执行文件:```foxproShell("C:\path\to\executable.exe")```上述代码会执行指定的可执行文件。

4.执行一个命令行命令:```foxproShell("cmd /c echo Hello World")```上述代码会在命令行中打印“Hello World”。

5.执行一个VFP本地应用程序:```foxproShell(SYS(16) + "C:\path\to\application.exe")```上述代码会执行指定的VFP本地应用程序。

二、使用OLE Automation调用其他应用程序除了使用Shell函数,还可以使用OLE Automation技术来调用其他应用程序。

OLE Automation允许VFP应用程序与其他支持OLE Automation的应用程序进行交互,通过创建和操作各种对象来实现。

vfp中API的调用(foxtooleddergcallfn)

vfp中API的调用(foxtooleddergcallfn)

vfp中API的调用(foxtooleddergcallfn):动态连接函数库(DLLs)可以说是系统的基础,Windows系统或Windows的应用系统在执行过程中,常常通过外部的动态连接函数库支持其所需动态连接函数库(DLLs)可以说是系统的基础,Windows系统或Windows的应用系统在执行过程中,常常通过外部的动态连接函数库支持其所需功能,如控制屏幕、打印机、鼠标、键盘等设备,若在设计过程中,将完成这些功能的程序都重复写在系统中,就会使程序过大。

另外一点,就是这些工作函数库具有共享功能,也就是说可以利用Windows程序开发工具,直接使用这些属于Windows函数库的功能,直接在程序中访问,增加开发的系统与Windows系统环境的结合能力。

WindowsAPI的大约400多个API功能,大部分都可供用户调用,若能用好这些WindowsAPI功能,既可减少重复开发,又能提高应用系统对Windows环境的兼容性和系统性能。

在Windows环境中所提供的工作函数库主要有下面三个文件:GDI.EXE———屏幕显示及打印功能。

USER.EXE———鼠标、键盘、端口、声音及时钟功能。

KERNEL.EXE———文件及内存管理(核心部分)功能。

FOXTOOLS.FLL就是ForWindows提供的访问WindowsAPI函数的动态连接函数库。

它提供下面两个函数:RegFn()———WindowsAPI功能注册函数。

CallFn()———WindowsAPI功能调用函数。

要使用WindowsAPI函数首先应该用RegFn()函数注册该函数,注册成功后再用CallFn()函数调用之。

RegFn()和CallFn()的语法如下。

RegFn(<Functionname>,<ArgmentTypes>,<ReturnTypes>,[DLLname])CallFn(<FnNum>,[<Arg1>,<arg2>....])参数说明:Functionname为要调用的API函数的函数名称。

积累了八年的15个最适用的VFP自定义函数)

积累了八年的15个最适用的VFP自定义函数)

积累了八年的15个最适用的VFP自定义函数)[原创] 积累了八年的15个最适用的VFP自定义函数本人长期运用VFP从事管理信息系统的开发,已成功销售了近10套自己开发的软件,可以说是VFP给我带来了财富。

多年来,本人在VFP方面已积累了大量的开发经验,现将我已成功应用的一部分(估计各位能用得上的)自定义函数贡献出来与各位分享。

当然,也请您支持我2个金币吧!特别说明:以下函数中所涉及到的数据表、存储过程等内容因为太多,所以只要你提问,我一定会解答或提供的。

自定义函数列表:1.SQLLink(vcODBCName,vcUserName,vcPassword)&&根据所提供的ODBC、用户名及密码创建连接MSSQL数据库服务器的数据连接句柄&&以便用于执行MSSQL存储过程、执行Select 语句等,是网络版VFP软件的必备2.GetSrvDateTime()&&获取MSSQL数据库所在服务器的日期时间,可任意指定日期格式3.GetMainDir()&&获得系统运行的主目录4.GetOperator()&&获得当前正在操作的操作员姓名5.GetRight(cOperator,cField)&&根据cOperator所指定的操作员来判断其是否有权操作该任务(cField),返回逻辑型&&例如:GetRight("张三","出入库查询")6.DoForm(cFormName,cField)&&以GetRight()函数为依据,判断当前操作员是否有权运行cFormName表单&&例如:DoForm("Frm_FindStock","出入库查询")7.DoReport(cReportName,cField,lPreviewOrPrint,cWindowN ame,lExpression)&&与DoForm()函数类似,判断当前的操作员是否有权打印或运行某个报表(cReportName)&&可设置是否预览、可设定预览窗口,还可指定条件预览8.EncryptPWD(cFirstPassWord)&&对所提供的字符串cFirstPassWord进行加密,主要用于对操作员密码的加密,&&这样就算别人打开了Password.DBF,也无法知道其真实密码9.nEncryptPWD(cFirstPassWord)&&是EncryptPWD()函数的反向运算,对已经加密过的字符串进行解密10.RMBZH(nRMB)&&人民币小写转换为大写的函数,这个函数好多地方都有介绍的11.SetInit()&&初始化表单运行环境的自定义过程,避免在每一个Form.SCX 中再单独设定,一劳永逸12.RunDosProg&&调用Dos或Windows应用程序的自定义过程&&如:DO RUN WITH "DosProgramName"13.BackupDataBase(vcBackupFilePath,vcBackupDeviceName)&&运用存储过程(BackupDataBase)对MSSQL中特定的数据库进行全自动备份&&如:BackupDataBase("DBBackup","E:\MSSQL\BACKUP\")14.DoExport(lGetRight,cTableName,cFileType)&&根据权限范围,将当前工作表导出为指定类型的文件,默认为Excel文件&&支持FOX2X/DIF/MOD/SDF/SYLK/WK1/WKS/WR1/WRK/CSV/XLS/XL5 &&如:DoExport("数据导出","DB_Product","CSV")15.GetDaysInMonth(nMonth)&&根据所提供的月份返回该月有多少天,返回值类型为数值型&&如:GetDaysInMonth(8) --> 结果为:31FUNCTION SQLLink(vcODBCName,vcUserName,vcPassword) *创建联接服务器的数据连接**********************************************参数说明********************************************************************** 如果vcODBCName,vcUserName,vcPassword三个参数中的一个为空值,则从DBSQL表中取值* vcODBCName=1,连接MSSQL的ODBC名称* vcUserName=1,MSSQL管理员帐号* vcPassword=1,MSSQL管理员密码*************************************************************** ***********************************************************IF EMPTY(vcODBCName) OR EMPTY(vcUserName) OR EMPTY(vcPassword)IF !USED("DBSQL")USE DBSQL IN 0ENDIFSELECT DBSQLIF RECCOUNT("DBSQL")<=0vcODBCName=""vcUserName=""vcPassword=""ELSEGO TOPvcTempODBCName=ALLTRIM(DBSQL.ODBCName)vcTempUserName=ALLTRIM(/doc/7a3 718930.htmlerName)vcTempPassword=ALLTRIM(DBSQL.Password)vcODBCName=UnEncryptPWD(vcTempODBCName)vcUserName=UnEncryptPWD(vcT empUserName)vcPassword=UnEncryptPWD(vcTempPassword)ENDIFUSE IN DBSQLENDIFgnConnHandle=SQLCONNECT(vcODBCName,vcUserName, vcPassword)IF gnConnHandle<= 0= MESSAGEBOX('不能建立与数据库服务器的数据连接,请与系统管理员联系!', 16, '提示信息')&&CLEAR EVENTS&&QUITENDIFRETURN gnConnHandleENDFUNCFUNCTION GetSrvDateTime(nDateTimeValue)*获取服务器端的系统日期时间**********************************************参数说明******************************************************************* *** nDateTimeValue=1,取值为服务器的日期时间格式,默认值为1* nDateTimeValue=2,取值为服务器的日期型格式* nDateTimeValue=3,取值为服务器的时间型格式* nDateTimeValue=4,取值为本机日期时间型格式,用于打印报表*************************************************************** *********************************************************** *!* pdSrvDateTime=DATE()*!* RETURN pdSrvDateTime*CREATE CONNECTION gnConnHandle DATASOURCE "SunMIS_SQL" USERID "SA")IF EMPTY(nDateTimeValue) OR ISNULL("nDateTimeValue") OR nDateTimeValue<1 OR nDateTimeValue>3nDateTimeValue=1ENDIF&&gnConnHandle=SQLCONNECT("IRGT","sa","147")gnConnHandle=SQLLink()IF gnConnHandle<0 Then &&不能建立连接DO CASECASE nDateTimeValue=1 &&本机的日期时间型pdSrvDateTime=DATETIME()CASE nDateTimeValue=2 &&本机的日期型pdSrvDateTime=DATE()CASE nDateTimeValue=3 &&本机的时间型pdSrvDateTime=TIME()CASE nDateTimeValue=4 &&本机的日期时间型pdSrvDateTime=DATETIME()ENDCASEELSESQLEXEC(gnConnHandle,"Select GetDate() AS SrvDateTime") IF RECCOUNT("SQLRESULT")<=0 THENDO CASECASE nDateTimeValue=1&&本机的日期时间型pdSrvDateTime=DATETIME()CASE nDateTimeValue=2 &&本机的日期型pdSrvDateTime=DATE()CASE nDateTimeValue=3 &&本机的时间型pdSrvDateTime=TIME()CASE nDateTimeValue=4 &&本机的日期时间型pdSrvDateTime=DATETIME()ENDCASEELSEDO CASECASE nDateTimeValue=1 &&服务器的日期时间型pdSrvDateTime=SQLRESULT.SrvDateTime*!* MESSAGEBOX(pdSrvDateTime)CASE nDateTimeValue=2 &&服务器的日期型pdSrvDateTime=TTOD(SQLRESULT.SrvDateTime)CASE nDateTimeValue=3 &&服务器的时间型pdSrvDateTime=SUBSTR(TIME(SQLRESULT.SrvDateTime),1,8) &&pdSrvDateTime=TIME(SQLRESULT.SrvDateTime)&&pdSrvDateTime=CTOT(SUBSTR(TIME(SQLRESULT.SrvDat eTime),1,8))CASE nDateTimeValue=4 &&本机的日期时间型pdSrvDateTime=DATETIME()ENDCASE*!* pdSrvDateTime=TTOD(SQLRESULT.SrvDateTime)ENDIF=SQLDISCONNECT(gnConnHandle)ENDIF*!* ?TYPE("pdSrvDateTime")*!* ?pdSrvDateTime*!* MESSAGEBOX(pdSrvDateTime)RETURN pdSrvDateTimeENDFUNCFUNCTION GetMainDir()*获得系统运行的主目录,便于判断其是否有权限进行相关操作。

VFP调用AP实用程序(精)I

VFP调用AP实用程序(精)I

VFP调用AP实用程序(精)I设置表单的窗口区域* Program Name : SetWinRegion.Prg* Article No. : [Win API] - 020* Illustrate : 设置表单的窗口区域* Date / Time : 2001.09.10* Writer :* 1st Post :* My Comment : 类似于‘在一个表单上戳一个(或几个平行)的透明窟窿’的* : API,它把单进行部分透明,其表单并没有宿小,可以看见背后* : 的东西,在 VFP 7.0 下运行,效果更佳。

*******************************************************Public frmfrm = CreateObject ("Tform")frm.Visible = .T.ReturnDefine CLASS Tform As FormCaption = "Setting the Window Region"Width = 600Height = 350AutoCenter = .T.MaxButton = .F.MinButton = .F.Add OBJECT CmdOn As CommandButton WITH;Left=15, Top=7, Width=120, Height=25, FontName = 'System',;Caption="Set Region On"Add OBJECT CmdOff As CommandButton WITH;Left=15, Top=35, Width=120, Height=25, FontName = 'System',;Caption="Set Region Off"Procedure LoadThis.declEndprocProcedure CmdOn.ClickThisform.regionOnEndprocProcedure CmdOff.ClickThisform.regionOffEndprocProcedure regionOnLocal hRgnhRgn = CreateRectRgn (0, 0, 200, 100)= SetWindowRgn (GetFocus(), hRgn, 1)EndprocProcedure regionOff= SetWindowRgn (GetFocus(), 0, 1)EndprocProcedure declDeclare INTEGER GetFocus IN user32Declare INTEGER CreateRectRgn IN gdi32;INTEGER nLeftRect,;INTEGER nTopRect,;INTEGER nRightRect,;INTEGER nBottomRectDeclare SetWindowRgn IN user32;INTEGER hWnd,;INTEGER hRgn,;SHORT bRedrawEndprocEnddefine*************************************************************** ******** Program Name : Long2Short.Prg* Article No. : [Win API] - 019* Illustrate : 转换长路径/文件名为短路径/文件名* Date / Time : 2001.09.10* Writer :* 1st Post :* My Comment : FoxPro 的许多命令/函数只能处理 8/3 格式的短路径/文件名,* : 有了 GetShortPathName API 函数,吃饭蹦蹦香......* Usage : ? ShortPath("C:\Program Files\Microsoft Visual * : Studio\Vfp98")*************************************************************** *********Function ShortPath********************* Function: Converts a Long Windows filename into a short *** 8.3 compliant path/filename*** Pass: lcPath - Path to check*** Return: lcShortFileName*************************************************************** **********Lparameter lcPathDeclare INTEGER GetShortPathName IN "kernel32";STRING @ lpszLongPath,;STRING @ lpszShortPath,;INTEGER cchBufferlcPath = lcPathlcShortName = SPACE(260)lnLength = LEN(lcShortName)lnResult = GetShortPathName(@lcPath, @lcShortName, lnLength)If lnResult = 0Return ""EndifReturn LEFT(lcShortName,lnResult)* Program Name : NationalLanguage.Prg* Article No. : [Win API] - 018* Illustrate : 获取国家语言代码设置* Date / Time : 2001.09.10* Writer :* 1st Post :* My Comment : 系统缺省 LangID = 2052 为中文(简体),其他代码请查找* : 手册。

vfp中api函数调用实例

vfp中api函数调用实例

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别名,另取的别名是不区分大小写的。

在Visual FoxPro中调用API函数的几个实例

在Visual FoxPro中调用API函数的几个实例

在Visual FoxPro中调用API函数的几个实例
赵月爱
【期刊名称】《太原师范学院学报(自然科学版)》
【年(卷),期】2003(002)002
【摘要】Windows的动态链接库中提供了丰富的API函数,不仅供Windows系统自身运行时调用,也可被Windows的应用程序所调用.文章通过几个实例介绍了如何在Visual FoxPro中调用Windows API函数以实现程序设计的高级编程技巧.【总页数】3页(P13-15)
【作者】赵月爱
【作者单位】太原师范学院,计算机系,山西,太原,030012
【正文语种】中文
【中图分类】TP316.86
【相关文献】
1.在FoxPro中调用Windows API函数及实例 [J], 顾海杰
2.利用Windows API函数在Visual FoxPro中建立热区 [J], 李朝辉;王艳君
3.在Visual Basic中如何调用Windows API函数 [J], 闫金玉
4.如何在VisualFoxPro3.0中使用Windows3.1API函数 [J], 赵俊杰
5.Foxpro2.5For Windows中调用Windows API函数的方法 [J], 朱俊青;张青宏因版权原因,仅展示原文概要,查看原文内容请购买。

  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下测试通过。

相关文档
最新文档