VFP中调用其他应用程序的方法
[精彩]vfp调用windowsapi函数
![[精彩]vfp调用windowsapi函数](https://img.taocdn.com/s3/m/5094b6fd80c758f5f61fb7360b4c2e3f57272508.png)
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中调用默认关联的程序打开文件在Visual FoxPro(VFP)中,可以使用SHELL命令调用默认关联的程序来打开文件。
SHELL命令允许执行操作系统命令或其他可执行文件。
要在VFP中使用SHELL命令来打开文件,请按照以下步骤进行操作:步骤1:确定默认关联的程序首先,您需要确定要打开的文件类型的默认关联程序。
这可以通过右键单击文件并选择“打开方式”来完成。
然后可以看到系统选择的默认程序。
步骤2:使用SHELL命令使用SHELL命令来调用默认关联的程序,语法如下:``````步骤3:构建命令字符串构建调用默认关联程序的命令字符串,将默认关联程序的路径和要打开的文件作为参数传递给命令字符串。
可以使用FILE命令来获取文件的路径和名称。
``````在这个命令字符串中,“start”是Windows系统的命令,用于启动关联的程序,文件路径和名称是由FILE函数返回的结果。
步骤4:执行SHELL命令最后,使用构建的命令字符串执行SHELL命令。
``````这将调用默认关联的程序来打开指定的文件。
以下是一个完整的示例,演示如何使用SHELL命令在VFP中调用默认关联程序打开文件:```CLEARfile_path_and_name = GETFILE("Open", "选择要打开的文件")IF !EMPTY(file_path_and_name)ENDIF```在这个示例中,首先通过GETFILE函数获取要打开的文件的路径和名称。
然后,构建命令字符串并使用SHELL命令执行它,以调用默认关联的程序打开文件。
请注意,SHELL命令在不同的操作系统上可能会有所不同。
在Windows系统上,“start”命令通过默认关联的程序打开文件。
在其他操作系统上,可能需要使用不同的命令或方法来实现相同的功能。
希望这些信息对您有所帮助!。
VFP中常用WIN32API函数调用事例

我们在VFP编程时,为了弥补VFP本身功能的不足,常常会用到WIN32API函数来对VFP的功能行扩展,例如取得系统信息、 对注册表进行操作等,但是由于WIN32API函数是C++的数据结构形式,在调用时与VFP的数据格式有所不同,因此在调用时往 往会产生问题,而目前的一些资料所介绍的大都是VB、DELPHI等语言如何调用,对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 指定该函数返回值的类型,其类型代码如下: SHORT 16 位整数 INTEGER 32 位整数 SINGLE 32 位浮点数 DOUBLE 64 位浮点数 STRING 字符串 FunctionName 指定要注册使用的32位函数名。注意 Funห้องสมุดไป่ตู้tionName 区分大小写。 如果该函数名与Visual FoxPro的保留字相同,应使用AS参数另起别名。 IN LibraryName 指定该函数所在的外部动态链接库文件名,如果LibraryName为: WIN32API时,VFP将依次查找KERNEL32.DLL、GDI32.DLL、 USER32.DLL、MPR.DLL及ADVAPI32.DLL等动态链接库文件名。 AS AliasName 当API函数的名称与Visual FoxPro的保留字相同时,另取 AliasName别名,另取的别名是不区分大小写 的。
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 函数支持更多的参数选项,包括打开方式、工作目录、参数等。
VFP调用EXCEL

VFP(Visual Foxpro)是一种关系型数据库管理系统,由于其强大的数据处理能力及良好的兼容性,使其成为数据库应用程序开发人员强有力的工具而广为使用; 而Excel则是一个优秀的电子表格处理软件,在兼容性、操作界面、公式运算、图表等方面有着独到的优势,成为广大办公应用人员必备的首选软件。
上述两种软件在各自的应用领域均得到了广泛的应用,同时上述两种软件还具有良好的交互编程能力,为两者相辅相成、取长补短奠定了良好的基础。
本文将结合实例介绍VFP与Excel交互编程的方法,在VFP中除了使用OLE技术外,还可使用DDE技术与外部服务器进行数据交换,本文主要讲解VFP中使用OLE技术与Excel交换数据,Excel中借助内置的VBA使用VFP提供的Application对象来调用VFP中的一些功能。
其功能可简述如下:VFP数据表“学生成绩.DBF”中含“学号、姓名、语文、数学”等字段,示例程序将从Excel工作簿“VFP交互.XLS”的工作表“查询”中用“条件”区域(一般为一个矩形区中的数据,该区域名称指定为“条件”,数据形如“语文>60”、“数学<90”等)中的数据作为查询的条件,用“连接条件”区域(一般为一个单元格,其值为“or”或者“and”)来获取组合“条件”的逻辑连接,并将该连接信息的内容以工作表的形式显示出来,然后调用VFP中针对给定表的SQL查询来找出给定条件的记录并显示到Excel中。
下列程序均在VFP 6.0与Excel 2000中调试通过。
Excel驱动VFPExcel内置的VBA语言(Visual Basic For Application)为Excel功能的扩展提供了便利的手段,用户可使用该语言直接驱动VFP完成数据检索等功能。
程序首先生成一个VFP对象,然后用VFP的DoCmd方法执行VFP搜索命令串,其搜索结果再借助于VFP的DataToClip方法拷贝至剪切板,最后VBA将其粘贴至工作表的正确位置,为了每次运行时能将结果插入到工作表中,依次对操作的工作表以“搜索结果”、“搜索结果1”等进行编号。
VFP调用DLL

VFP的主要是用于数据库开发,所以开发软件自身配带的功能都是针对数据库开发,对于W indow s的管理和系统信息的捕获就很困难了,只能调用OCX或DLL来扩展其功能,下而将详细讲解一下DLL的调用技巧:调用DL L语法:Decl are 返回值类型要调用的函数名称相关DLL或LIB文件传入参数类开型[字段名]......有多少个传入参就定多少举例:要调用U ser32内的函数F indwi ndowDecl are I ntege r Fin dWind ow In User32.DL L Str ing l pClas sName,Str ing l pWind owNam e这个是基础,但再深入调用DLL时,你会发现有部分DLL的传入参数是一个指针,这种情况如何处理呢.举例:要调用k ernel32内的P roces sIdTo Sessi onId其传入参数S essio nID是一个数值型指针,那么声名就要更改一下,在指针的传入参前加入@,其实也不能理解,DL L之所以用指针,最大的原因就是要进行值传递,相当于VB的by ref,指针返来的值可以理解为一个值传递变量,所以VF也要用@来声名该变量是值传递的变量.De clare Inte ger P roces sIdTo Sessi onIdIN ke rnel32 int egerProce ssID,integ er@S essio nID使用时也用@来传入变量in t Pro cessI Dint Sess ionIDEr1=Proce ssIDT oSess ionID(Proc essID,@Ses sionI D)*注:ER1是返回函数是否正常被执行的变量但VF P有个很大的缺陷,就是不支持定义结构体,所以有很大部份DLL由于要传入结构体参数,而无法被VFP调用.要查看DLL函数的定义及传入参资料,有一个很好的软件叫Apifo x,虽然他是以VB的语法来讲述,但只要对VB语法有简单了解就可以很明名知道在VF P中是如何调用h ttp://blog.csd/turej ackon/arch ive/2008/12/30/3658190.as px注册外部W indow s 32位动态链接库 ( .DLL )中的一个函数。
vfp调用word OR excel

vfp调用word OR excel(一)1.VFP全面控制EXCLVFP和Excel都可以用来进行处理数据库表格,如果巧妙地将二者的优点结合起来,将会大大方便我们的工作。
比如我们可以利用VFP进行处理数据,而利用Excel的预览打印功能进行报表打印。
这就需要我们在VFP中直接来控制Excel。
下面就在开发VFP应用项目时对Excel的控制作一下介绍:1.创建Excel对象eole=CREATEOBJECT(′Excel.application′)2.添加新工作簿eole.Workbooks.add3.设置第3个工作表为激活工作表eole.Worksheets(″sheet3″).Activate4.打开指定工作簿eole.Workbooks.Open(″c:templl.xls″)5.显示Excel窗口eole.visible=.t.6.更改Excel标题栏eole.Caption=″VFP应用程序调用Microsoft Excel″7.给单元格赋值eole.cells(1,4).value=XM(XM为数据库字段名)8.设置指定列的宽度(单位:字符个数)eole.ActiveSheet.Columns(1).ColumnWidth=59.设置指定行的高度(单位:磅)eole.ActiveSheet.Rows(1).RowHeight=1/0.035(设定行高为1厘米,1磅=0.035厘米)10.在第18行之前插入分页符eole.Worksheets(″Sheet1″).Rows(18).PageBreak=111.在第4列之前删除分页符eole.ActiveSheet.Columns(4).PageBreak=012.指定边框线宽度(Borders参数如下)ole.ActiveSheet.Range(″b3:d3″).Borders(2).Weight=313.设置四个边框线条的类型eole.ActiveSheet.Range(″b3:d3″).Borders(2).LineStyle=1(其中Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/;LineStyle值:1与7-细实、2-细虚、4-点虚、9-双细实线)14.设置页眉eole.ActiveSheet.PageSetup.CenterHeader=″报表1″15.设置页脚eole.ActiveSheet.PageSetup.CenterFooter=″第&P页″16.设置页眉到顶端边距为2厘米eole.ActiveSheet.PageSetup.HeaderMargin=2/0.03517.设置页脚到底边距为3厘米eole.ActiveSheet.PageSetup.FooterMargin=3/0.03518.设置顶边距为2厘米eole.ActiveSheet.PageSetup.TopMargin=2/0.03519.设置底边距为4厘米eole.ActiveSheet.PageSetup.BottomMargin=4/0.03520.设置左边距为2厘米veole.ActiveSheet.PageSetup.LeftMargin=2/0.03521.设置右边距为2厘米eole.ActiveSheet.PageSetup.RightMargin=2/0.03522.设置页面水平居中eole.ActiveSheet.PageSetup.CenterHorizontally=.t.23.设置页面垂直居中eole.ActiveSheet.PageSetup.CenterVertically=.t. 24.设置页面纸张大小(1-窄行8511 39-宽行1411) eole.ActiveSheet.PageSetup.PaperSize=125.打印单元格网线eole.ActiveSheet.PageSetup.PrintGridlines=.t.26.拷贝整个工作表edRange.Copy27.拷贝指定区域eole.ActiveSheet.Range(″A1:E2″).Copy28.粘贴eo le.WorkSheet(″Sheet2″).Range(″A1″).PasteSpecial 29.在第2行之前插入一行eole.ActiveSheet.Rows(2).Insert30.在第2列之前插入一列eole.ActiveSheet.Columns(2).Insert31.设置字体eole.ActiveSheet.Cells(2,1)=″黑体″32.设置字体大小eole.ActiveSheet.Cells(1,1).Font.Size=2533.设置字体为斜体eole.ActiveSheet.Cells(1,1).Font.Italic=.t.34.设置整列字体为粗体eole.ActiveSheet.Columns(1).Font.Bold=.t.35.清除单元格公式eole.ActiveSheet.Cells(1,4).ClearContents36.打印预览工作表eole.ActiveSheet.PrintPreview37.打印输出工作表eole.ActiveSheet.PrintOut38.工作表另为eole.ActiveWorkbo ok.SaveAs(″c:temp22.xls″)39.放弃存盘eole.ActiveWorkbook.saved=.t.40.关闭工作簿eole.Workbooks.close41.退出Exceleole.quit2.VFP数据导出至EXCEL问题这样设计:oexl=createobject("excel.application")oexl.workbooks.addoexl.visible=.t.oexl.workbooks(1).activateoexl.cells(1,1).value="名称1"oexl.cells(1,2).value="名称2"oexl.cells(1,3).value="名称3"3.如何在VFP5.0中利用EXCEL的功能做报表在VFP中调用Excel要利用Automation。
如何用VFP调用API

二、 打开、打印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浏览器控件,但是如果没有专业的技术文档,你要想顺利地使用浏览器控件,这基本上是不可能的。有没有一种更简单的办法来实现上述功能呢?有的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 文件的软件名及安装路径----灵活运用该段程序,可以大大丰富我们在软件中的表现能力,例如应用软件的菜单中都有一项“关于本软件”的功能,该功能调用的表单一般用来显示有关系统资源及软件版权的信息。
如果我们要给其中的公司信息加上超文本链接使其可以直接访问公司主页。
就可以在显示公司信息的Label控件的 Click 事件中使用如下语句:fullpath=lookreg("htm")If allt(fullpath)= =[]=messagebox(" 无法找到浏览器以浏览公司主页!",64,"")retuElsefullpath=subst(fullpath,1,rat([.],fullpath)-1)+space(2)+;]RUN/n3 &fullpathEndif---- (二)利用Windows 的文档关联特性直接调用。
----我们知道,Windows是一种面向文档的操作系统。
当我们双击某个文件时,Windows就会自动启动与该文件相关联的应用程序来对文件进行处理。
在这个过程中Windows主要使用了一个名为ShellExecute的Win32 API函数。
我们可以通过这个函数来直接调用其他程序,彻底抛弃Run 命令的方式。
Function shellstartParameters documentname* 声明ShellExecute函数DECLARE INTEGER ShellExecute INshell32.DLL INTEGER HWND,;STRING lpszOP, ;STRING lpszFile, ;STRING lpszParams, ;STRING lpszDir, ;INTEGER fsshowcmd* 指定ShellExecute函数的输出指向Windows桌面DECLARE INTEGER GetDesktopWindow IN win32api HWND = GetDesktopWindow()* 指定操作命令为"打开"方式lpszOP = "open"* 指定ShellExecute操作的对象为 documentname lpszFile = documentnamelpszParams = ""* 指定ShellExecute的缺省目录为c:\temp lpszDir = "c:\temp"fsshowcmd = 0* 执行ShellExecute命令LNRETURN = ShellExecute(HWND, lpszOP, lpszFile, lpszParams, lpszDir,fsshowcmd) Retu调用方式:=shellstart("")&& 连接到网=shellstart(“c:\windows\script.doc”)&& 打开c:\windows\script.doc文件---- 以上程序已经在VFP6.0中文版,Pwin 97中调试通过。