VFP中调用其他应用程序的方法
[精彩]vfp调用windowsapi函数
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浏览器控件,但是如果没有专业的技术文档,你要想顺利地使用浏览器控件,这基本上是不可能的。有没有一种更简单的办法来实现上述功能呢?有的。
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调用word?OR?excel(二)
[转载]vfp调用word?OR?excel(二)vfp调用word OR excel(二)10.从VFP中导出数据的几种方法!答:当VFP处理好数据后,这时你可以用多种方法将这些数据导出,以便被其它应用程序(如Excel等)所用。
下面向你简单介绍几种导出数据的方法:1.用“导出数据”对话框。
你可以从VFP主菜单中选择“文件/导出…”打开“导出”对话框,在该对话框中的“来源”框中输入表名(c:vfpstudents.dbf),在“类型”中指定要导出数据的类型(Microsoft Excel),在“到”框中输入导出的路径和文件名(C:excelaa.xls),然后按“确定”即可。
这时你如果查看command窗口,可发现以下代码:COPY TO C:excelaa.XLS TYPE XL52.用COPY TO命令。
COPY TO命令的工作对象是VFP中的表,它要依据“TYPE”项才知道要产生哪一类导出文件。
对于上面的导出过程,可用以下方法实现:USE studentsCOPY TO C:excelaa.XLS TYPE XL512.在VFP6中,如何调用已经存在的WORD文件?oW = CREATEOBJECT([word.basic])with oW.Apprestore().Appmaximize().fileopen("路径+文件名.扩展名")ENDWITH13.打开word文件的控件?用RUN /N3 C:WORD.EXE 文档路径C:WORD.EXE是我自己写的,你用时换成WORD的真正路径就行了!比如用WORD 打开SD.DOC 就写RUN /N3 C:WORD.EXE C:SD.DOC另:TXLS_EOLE = CREATEOBJECT('word.application')TXLS_EOLE.Documents.Open('文件名.doc')TXLS_EOLE.Visible=.t.注意:别忘了关闭哦TXLS_EOLE.Documents.close &&关闭文档TXLS_EOLE.quit &&关闭wordRELEASE TXLS_EOLE &&释放对象再者:fw=alltrim(this.value)if file('&fw')*documents.open filename('&fw')wrdapp = createobject("word.application")wrdapp.visible=.t.*wrdapp.documents.addwrdapp.documents.open(alltrim(this.value))elsemessagebox(fw+chr(13)+'文件不存在,请确认',0+16,'文件路径出错')RETURN(.F.)ENDIF14.在表单中创建一个编辑框,用来显示WORD文档!做一个按扭,在CLICK中写:THISFORM.EDIT1.value=FILETOSTR(GETFILE('DOC'))这个不也行,而且还简单15.强烈建议:直接使用ole可以在表单中打开word,建议不使用这种办法,改为利用api用windows默认的程序打开word,数据库只存储word文档所在的位置和名字。
VFP中调用其他应用程序的方法
VFP中调用其他应用程序的方法在 Visual FoxPro(VFP)中调用其他应用程序可以通过使用 Shell函数或者使用 COM 互操作实现,下面将详细介绍这两种方法。
1. 使用 Shell 函数:Shell 函数用于在操作系统中执行命令行命令或者启动一个应用程序。
通过 Shell 函数可以调用其他应用程序并传递参数。
以下是使用 Shell函数调用其他应用程序的基本步骤:步骤1:使用 Shell 函数执行命令行命令或者启动一个应用程序。
语法:``````其中- windowstyle:可选参数,指定打开的窗口样式,如最大化、最小化等。
例如,调用记事本程序(Notepad.exe)并打开一个文本文件可以使用以下代码:```Shell("notepad.exe C:\Test.txt", 1)```步骤2:为了获取和处理其他应用程序的返回结果,可以使用 Shell 函数的返回值。
语法:``````其中- result:是 Shell 函数的返回值,可用于检查命令是否成功执行。
例如,以下代码将返回打开的记事本窗口的句柄:```hWnd = Shell("notepad.exe", 1)```2.使用COM互操作:步骤1:创建一个COM对象,该对象可以与其他应用程序进行交互。
例如,下面的代码创建一个与 Microsoft Excel 进行交互的 COM 对象:```oExcel = CREATEOBJECT("Excel.Application")```步骤2:调用COM对象的方法和属性来实现与其他应用程序的交互。
例如,下面的代码打开一个 Excel 文件:```oExcel.Workbooks.Open("C:\Test.xlsx")```步骤3:使用完COM对象后,记得将其释放。
例如,下面的代码用于释放 Excel COM 对象:```RELEASE oExcel```需要注意的是,使用COM互操作需要了解被调用应用程序的对象模型,并且正确使用对象的方法和属性。
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中调用其他应用程序的方法
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):动态连接函数库(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函数的函数名称。
VF操作
【转载】vf常用代码集锦(中)◆为什么编译后的程序运行时屏幕一闪就不见了你需要在你的程序中建立“等待状态”。
可以用READ EVENTS命令来建立等待状态。
要清除等待状态,可使用CLEAR EVENTS命令。
如果你只有一个屏幕,把表单的WindowState属性设置为Modal。
这也提供等待状态,但是不允许你使用菜单。
当模式表单被释放时,等待状态结束并返回至操作系统。
例如:主程序如下,并且要将主程序点左键设为主文件即可。
do form 表单read eventsquiton shutdown on aa.prgaa.prg程序内容如下:clear eventsquit在config.fpw文件中放入以下内容:screen=offform表单的unload事件:clear eventsquit注:要将表单设为顶层表单◆ VFP中系统计算器的调用在VFP中有一个系统隐含的计算器,可以通过命令方式调出来。
这样可以帮助用户在进行数据录入时同步核算。
调用方法:ACTIVATE WINDOW calculator返回值:_calcvalue在计算器被调出来时,其显示器是灰色的rgb(192,192,192),当进行计算操作时,一个步骤结束后,显示器的颜色会变成黑色rgb(0,0,0),这时系统变量_calcvalue的值已经被改变。
在软件设计时,用ACTIVATE WINDOW calculator激活系统计算器,用_calcvalue来显示计算结果。
◆VFP中对控件动态提示的实现在使用Microsoft系列软件时,一旦您的鼠标停留在软件中所列的某个图标按钮上,就会在这个图标按钮的右下方出现一个黄色背景的提示框,说明这个按钮的作用;当把鼠标从这个按钮上移开后,提示框立即消失。
这一功能非常适用于应用程序中,即增加了应用程序的易用性,又使得软件显得非常专业化。
其实我们在设计VFP应用程序时,利用表单的ShowTips 属性和控件的ToolTipText属性可以轻松实现上述功能。
精通在VFP中调用WORD的方法
在VFP中调用WORD的基本方法目录一、建立WORD应用程序对象,新建、打开、保存WORD文档 (5)1、建立对象 (5)2、显示WORD窗口 (5)3、新建一个WORD文档 (5)(1)Count属性 (5)(2)Name属性 (5)4、打开一个已存在的WORD文档 (5)5、激活文档,使文档成为当前激动文档 (6)6、保存文档 (6)7、页面设置 (6)(1)Orientation属性 (6)(2)TopMargin属性 (6)(3)BottomMargin属性 (6)(4)LeftMargin属性 (6)(5)RightMargin属性 (7)(6)PageWidth属性 (7)(7)PageHeight属性 (7)8、打印文档 (7)9、关闭文档 (7)10、退出WORD (8)二、Font对象 (8)1、Name 属性 (8)2、Size属性 (8)3、Bold属性 (8)4、Italic属性 (8)5、Color属性 (8)6、Underline属性 (8)7、UnderlineColor属性 (8)8、Subscript属性 (9)9、Superscript属性 (9)10、Spacing属性 (9)11、Scaling属性 (9)三、Paragraph和Paragraphs集合对象 (9)1、添加段落 (9)(1)Add方法 (10)(2)InsertParagraph方法 (10)(3)InsertParagraphAfter 方法 (10)(4)InsertParagraphBefore 方法 (11)(5)TypeParagraph 方法 (11)2、设置段落格式 (11)(1)FirstLineIndent属性 (11)(2)LeftIndent属性 (11)(3)RightIndent属性 (11)(4)Alignment属性 (11)(5)LineSpacing属性 (12)(6)HangingPunctuation属性 (12)四、Range 和Selection 对象 (12)(1)Range对象 (12)(2)Selection 对象 (13)(3)常用属性 (13)①Start属性 (13)②End属性 (14)③Text属性 (14)④Type属性 (14)⑤Information 属性 (15)(4)常用方法 (18)①Copy 方法 (18)②Cut 方法 (18)③Paste 方法 (18)④Collapse 方法 (18)⑤InsertBefore 方法 (19)⑥InsertAfter方法 (19)⑦TypeText方法 (19)⑧Delete 方法 (20)⑨移动插入点的方法 (20)㈠Move 方法 (20)㈡MoveDown 方法 (20)㈢MoveEnd 方法 (21)㈣MoveEndUntil 方法 (21)㈤MoveLeft 方法 (22)㈥MoveRight方法 (22)㈦MoveStart 方法 (23)㈧MoveStartUntil 方法 (23)㈨MoveUp 方法 (24)五、表格处理 (25)1、Table 对象和Tables 集合对象 (25)2、添加表格 (25)(1)PreferredWidthType 属性 (25)(2)AllowAutoFit属性 (26)(3)AllowPageBreaks属性 (26)3、Border 对象和Borders 集合对象 (26)(1)LineStyle属性 (26)(2)LineWidth属性 (27)(3)Color属性 (27)(4)Enable 属性 (27)(5)DefaultBorderLineWidth 属性 (27)(6)DefaultBorderLineStyle 属性 (27)(7)DefaultBorderColor 属性 (28)4、Cell 对象和Cells 集合对象 (28)5、Row 对象和Rows 集合对象 (28)(1)Height 属性 (28)(2)Delete 方法 (28)(3)SetHeight 方法 (28)6、Column 对象和Columns 集合对象 (29)(1)Width 属性 (29)(2)Delete 方法 (29)(3)SetWidth 方法 (29)7、合并与拆分单元格 (30)(1)合并单元格 (30)(2)拆分单元格 (31)六、Shape 对象和Shapes 集合对象 (32)1、常用方法 (32)(1)AddLine 方法 (32)(2)AddTextbox 方法 (33)(3)AddTextEffect 方法 (33)(4)AddPicture 方法 (34)因WORD具有很强的文字排版和表格处理能力,在开发VFP应用程序过程中如果能巧妙地使用WORD,将极大地增强VFP的输出功能,设计出更加美观的文档和表格版面。
VFP中实现在浏览器中运行应用程序方法
使⽤VFP数据系统开发出来的应⽤系统,经过编译、发布和安装可以在脱离环境的情况下在操作系统中运⾏,其实这只是系统的⼀种运⾏⽅式,我们完全可以利⽤活动⽂档(Active Documents)的功能,实现将单纯操作系统⽅式下的应⽤系统向基于HTML的客户界⾯应⽤程序的转变,通过活动⽂档可顺利地将以前编写的应⽤程序移植到Web页⾯上,并可将VFP的功能传递到浏览器上。
下⾯以⼀个⼈员情况应⽤程序实现在浏览器中运⾏的例⼦,介绍具体的实现过程:⼀、新建⼀个项⽬ 命名为NEW并在该项⽬⽂件管理器添加⼀个表单BD1到项⽬中,设定该表单的属性如下:TitleBar=0 &&关闭表单的标题栏WindowState=2 &&设定表单运⾏时为化⽅式ScollBar=3 &&设定当表格处于⾮整屏显⽰时,可以使⽤垂直和⽔平滚动条在表单对象的Destory Events事件中加⼊如下程序代码:clear Events&&保证当表单关闭时,⽤户能够退出应⽤程序的运⾏。
⼆、在表单中添加数据环境和控件对象。
在表单的数据环境中添加⼀个数据表作为表单中的数据源,在这⾥我们增加的是⼀个⼈员情况表。
利⽤⿏标拖动数据环境中的相应字段选项添加到表单中,作为表单的编辑对象,并添加⼀个对数据记录进⾏操作的类对象,设置完毕的表单如下图:三、添加活动⽂档类到项⽬ 在建⽴好⽤户应⽤程序界⾯后,就可以向项⽬中添加活动⽂档类了,其步骤如下: 在项⽬管理器中选择“类”页⾯,单击“新建”按钮,创建⼀个活动⽂档类,设定其基类为活动⽂档,将之存储于⾃定义的类库⽂件中,设置结果如下图(略) 设定好新类后双击新类对象,打开新类对象的代码窗⼝,为新类对象的Destory Events事件设定程序代码如下:DO FORM BD1READ EVENTS设定新类对象的属性:ContainerReleaseType=1&&⽤户离开活动⽂档时,VFP将⾃动退出。
VFP6.0与其它应用程序的相互调用
VFP6.0与其它应用程序的相互调用
刘宏英
【期刊名称】《雁北师范学院学报》
【年(卷),期】2005(021)005
【摘要】本文介绍了如何利用Visual FoxPro6.0提供的OLE,自动化及ActiveX 控件等技术来实现Visual FoxPro与其它应用软件如C++,EXCEL,WORD,VB等进行数据和程序间的相互联系.
【总页数】3页(P38-40)
【作者】刘宏英
【作者单位】雁北师范学院计算机中心,山西大同,037009
【正文语种】中文
【中图分类】TP312
【相关文献】
1.制作VFP6.0应用程序安装盘应注意的问题 [J], 林军;王文剑
2.VFP6.0应用程序安装盘的制作 [J], 马弘伟;高巍;宋妍;范书平
3.浅谈用VFP6.0开发应用程序多用户口令表单设计的方法 [J], 王宏林
4.给VFP6.0应用程序加入用户管理功能 [J], 叶中文
5.用VFP
6.0的发布程序为VB6应用程序制作安装盘 [J], 周学红
因版权原因,仅展示原文概要,查看原文内容请购买。
- 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中调试通过。