请教了:VFP调用api时出现的疑问。

st_2000 2005-05-17 03:01:55
DECLARE INTEGER ShellExecute IN "Shell32.dll" ;
INTEGER hwnd, ;
STRING lpVerb, ;
STRING lpFile, ;
STRING lpParameters, ;
STRING lpDirectory, ;
LONG nShowCmd
*!* =Shellexecute(0,"Open",addr,"","",0)
=Shellexecute(0,"Open",addr,0,0,1)
CLEAR DLLS

该代码为豆子提供,表示感谢!
可是我只能打开pdf/jpg/tif/doc类的文档,每次打开dxf/dwx等文档时,只能开启相关的浏览器,然后 就提示“不能打开***" (机子已安装了相应的工具)


参数不对?


...全文
129 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
st_2000 2005-05-18
  • 打赏
  • 举报
回复
------------
RUN /n3 C:\Program Files\Microsoft Office\Office\WINWORD.EXE c:\test.doc
以上换成你的CAD程序相关路径
----------------------

这个可以打开,但我也不能用过个,因为不同用户用的执行文件类别/路径 不一样。
十豆三 2005-05-17
  • 打赏
  • 举报
回复
你输入的是文件的全路径吗?
如果是,那你先用下面方法先试试可不可以打开,如果下面也打不开,就不好办了。

例如:
RUN /n3 C:\Program Files\Microsoft Office\Office\WINWORD.EXE c:\test.doc
以上换成你的CAD程序相关路径
st_2000 2005-05-17
  • 打赏
  • 举报
回复
豆子:
------------------------
可以用任意的文件名来替换上文中的 c:\mlx.doc 。如果指定的文件名Windows无法找到相应的关连程序,这时程序将不会做出反应。有关的参数可以自行偿试进行修改,以达到最佳效果。
------------------------

我一直怀疑是因为是windows中关联的程序不够完美?
.dwf/dwg是CAD文档,在文件夹中双击自然就用cad打开没问题,可是在程序中只能引导到打开cad的画面,然后就没反应了,有的机子还提示”不能打开C:\...file2.dwg文件“,可是CAD执行文件已打开了啊!

cimssoft 2005-05-17
  • 打赏
  • 举报
回复
dxf/dwx是CAD的图形文件,
是不能直接打开的,
如果需要打开的话,
你可以在网上搜索一下,
看有没有相关的第三方控件
不过是有相关Delphi的第三方控件的,VFP有没有就不知道了
十豆三 2005-05-17
  • 打赏
  • 举报
回复
这是我搜集的有关你的问题资料:

*--------------------------------------


怎样在一个菜单中建立一个程序或命令打开一个网页或word,excel等文件???
*---------------------------------------------------------------

打开一个网页与word,excel是不一样.
1.word,excel要用ACTIVEX的OLECONTROL控件.
2.打开一个网页要用到HYPERLINK控件.
可以在表单上加一个TEXT一个COMMANG控件,还有一个超级链接HYPERLINK控件.
COMMAND.CLICK事件:
THISFORM.HYPERLINK.NAVIGATETO(THISFORM.TEXT.VALUE)

-------------------------------------------------------------
在vfp的例子中找到了一个这个问题的解决方法,使用api函数来解决,如下:
1、声明函数
DECLARE INTEGER ShellExecute ;
IN SHELL32.DLL ;
INTEGER nWinHandle,;
STRING cOperation,;
STRING cFileName,;
STRING cParameters,;
STRING cDirectory,;
INTEGER nShowWindow
2、在程序中任何地方调用,包括菜单中,打开一个e:\a.htm文件的调用方法如下,
=ShellExecute(0,"Open","e:\a.htm","","e:\",1)

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

在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 启动默认的浏览器.


缩主文件 Shell32.dll

在 VFP 中的定义
DECLARE INTEGER ShellExecute IN "Shell32.dll" ;
INTEGER hwnd, ;
STRING lpVerb, ;
STRING lpFile, ;
STRING lpParameters, ;
STRING lpDirectory, ;
LONG nShowCmd

Visual FoxPro 应用示例
* 打开 Word 来编辑文件 "c:\mywordfile.doc"
=Shellexecute(0,"Open","c:\mywordfile.doc","","",0)

* 打开默认的浏览器并定位到天堂论坛
=Shellexecute(0,"Open","http://www.dbwin.net/bbs/index.asp?boardID=1&page=1","","",0)

* 打开默认的邮件阅读器来发一封信给天堂版主
=Shellexecute(0,"Open","mailto:njjane@21cn.com","","",0)

* 打印文本文件 "c:\mytextfile.txt"
=Shellexecute(0,"Print","c:\mytextfile.txt","","",0)
---------------------------------------------------------------

其实有两个比较简单的方法
1、
run/n explorer "http://....com"
2、
declare integer WinExec in win32api string,integer&&这个INTEGER类型的参数是窗口的显示模式最大化,最小化,普通
winexec("explorer http://....com",3)

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

在OLEContainer1 的 init事件中加入这句话就可以了
This.navigate("http://www.microsoft.com")

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧