再问怎样在VFP中调用外部命令

再问怎样在VFP中调用外部命令,第1张

在VFP中如何调用其它程序

-------------------------------------------------------------

Declare Long WinExec In kernel32 String,Long

=WinExec("notepad.exe",1)

Clear Dlls

WinExec(one.exe,SW_SHOW)

里面的SW_SHOW意思是什么

WinExec()函数第二个参数是什么意思

如果我想以无参数运行one.exe应该怎么办??

SW_SHOW表示以当前大小激活运行后的程序窗口并显示它。

第二个参数是控制程序主窗口的显示方式

第二个参数可能的取值为 :

************************* 窗口指定可视性定义 **********************************API函数ShellExecute中最后一个参数及wscript.shell方法中的第2个参数也是这样定义的。

0 SW_HIDE 隐藏窗口,活动状态为原调用窗口

6 SW_MINIMIZE 最小化窗口,活动状态为原调用窗口

9 SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态

5 SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态

3 SW_SHOWMAXIMIZED 最大化窗口,并将其激活

2 SW_SHOWMINIMIZED 最小化窗口,并将其激活

7 SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口

8 SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口

4 SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口

1 SW_SHOWNORMAL 与SW_RESTORE相同

****************************************************************************

一般情况下,第二个参数取SW_SHOWNORMAL即可,这样就是无参数运行App.exe

WinExec("App.exe -参数" , SW_SHOWNORMAL)第二个参数只是WinExec函数的参数,不是AppName.exe的参数。

ox=Createobject("wscript.shell")

ox.Run("notepad.exe",1,0) &&第2个参数参考上面《窗口指定可视性定义》,第3个参数0表示调用后马上将控件权返回原调用程序,1表示直接被调用程序结束后才将控件权返回原调用程序(调用外部文件时让系统一直等待,直到运行结束才返回控制权就可以了)。

Release ox

如:

ox=Createobject("wscript.shell")

ox.Run("cmd /c copy c:\abc\1.txt d:\",0,1)

Release ox

Messagebox(' *** 作完成!',64,'信息提示')

在VFP中我们可以用run来调用由VFP自身生成的.exe文件。命令格式:

run c:\..\*.exe

当调用非VFP自身生成的.exe文件时,需要加上绝对路径和参数。

一般来说,用VFP运行非VFP自身生成的可执行文件时,会有一个黑色的窗口显示一下。可以通过加上/n来隐藏这个窗口。例如运行Windows下的扫雷游戏,命令格式如下:

RUN/n C:\Windows\Winmine.exe

下面运行一个更复杂一点的程序。用word打开c:\下的一个名为mlx.doc的word文件,命令格式如下:

run /n3 C:\Program Files\Microsoft Office\Office\Winword.exe C:\mlx.doc

参数:参考上面《窗口指定可视性定义》

n 在运行时隐藏VFP的黑色窗口。

3 表示以最大化的方式运行程序。1正常方式、2最小化方式、3最大化方式

在这种情况下,虽然可以通过加上参数使程序程序能够流畅运行,但还是要指定绝对路径,而在实际开发时我们常常无法确定所需要启动的应用程序的文件名及其绝对路径。比如,在上例中,我们无法确定用户的word到底安装在什么地方,如果用户把word安装到了别的地方,上述命令便会出错。再如,一个.gif文件,有的用户喜欢用ACD See来打开,有的用户喜欢用IE来打开,有的用户喜欢用豪杰来打开,……

为了解这种情况我们可以调用Windows的文件关连来打开文件。即所有的文件都用系统默认的程序来打开。这就要调用Windows的Win32 API函数。调用方式如下:

DECLARE INTEGER ShellExecute IN shell32.DLL INTEGER HWND,STRING lpszOP,STRING lpszFile,STRING lpszParams,STRING lpszDir,INTEGER fsshowcmd

DECLARE INTEGER GetDesktopWindow IN win32api

HWND = GetDesktopWindow()

lpszOP = "open"

* 指定要打开的文件名

lpszFile ="c:\mlx.doc"

lpszParams = ""

lpszDir = "c:\temp"

fsshowcmd = 1

* 执行ShellExecute命令

LNRETURN = ShellExecute(HWND, lpszOP,lpszFile, lpszParams, lpszDir,fsshowcmd)

可以用任意的文件名来替换上文中的 c:\mlx.doc 。如果指定的文件名Windows无法找到相应的关连程序,这时程序将不会做出反应。有关的参数可以自行偿试进行修改,以达到最佳效果。

-------------------------------------------------------------

API函数ShellExecute的使用

ShellExecute

说明 Shellexecute 函数用于对文件执行一个动词(verb). 它通常用于启动一个与特定文件类相关联的应用程序. 例如, 要启动 Word 来读一个 .doc 文件, 或启动 记事本 来编辑一个 .txt 文件. 用于第二个参数中的最常用的动词是 "Open", 但其它可用的动词是 "edit","print","explore" 和 "properties". 有趣的是, 使用 "mailto:" 或 "http://" 前缀, ShellExecute 函数也可用于以一个给定的邮件地址启动默认的邮件阅读器或给定的 URL 启动默认的浏览器.

采用传址方式。

根据Visual FoxPro软件应用设置,在默认情况下,Visual FoxPro在调用子程序时采用传址方式。

vfp是Microsoft公司从Fox公司的FoxBase数据库软件经过数次改良,并且移植到Windows之后,得来的应用程序开发软件。

在vfp中调用某方法,应该这样写:

do sdl11 in abc

而abc.prg中是存储过程的,如:

proce sdl11

*租赁单价的新建

*do sdl25

use .\dbf\kcwzcbj

copy struct to .\dbf\temp

use

use .\dbf\zydwmc

delete all for zldm=space(3)

pack

use

return

proce sdl12

*租赁单价的添加

*租赁单价的添加,原有的租赁单位已经存在租赁价格库,

*但是中途中,又要租赁新添加的品种,就必须运行本程序

use .\dbf\kcwzcbj

copy struct to .\dbf\temp

use

return

proce sdl13

*租赁单价的修改

use .\dbf\kcwzcbj

copy struct to .\dbf\temp

use

return

如果我们在调用某方法或函数,要传递参数,在调用某方法中,应该这样写:

do rzjjg in abc with ‘P30120',100

而 abc.prg中应该有,rzjjg,并且它的第一个语句必须为

para 参数1,参数2,。。。

『参数的个数与调用必须一一对应』

func rzjjg &&计算日租金价格

para x3,x2 &&x3:回送材料代码,X2:回送材料数量

select 3

seek x3

x4=iif(found(),rzj*x2*djmj,0) &&X4:日租金,djmj:单件面积(租金)

select 4

replace rzj with x4

return .T.

func cbjjs &&计算丢失价格

para x1,x2

select 3

seek x1

x4=iif(found(),cbj*x2,0)

select 4

return x4

以上的均为本人商业软件《建筑机具租赁管理系统-VFP版》的一个很小很小部分。

参考资料:本人商业软件《建筑机具租赁管理系统-VFP版》


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7954793.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存