| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 1038 人关注过本帖
标题:在表单中如何关闭调用的外部程序
只看楼主 加入收藏
cqcxy
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-10-16
结帖率:50%
  已结贴   问题点数:20  回复次数:10   
在表单中如何关闭调用的外部程序
在表单中有一个命令按钮,点击该按钮可以打开一个外部程序(视频播放器),如果不退出这个播放器,在VFP程序运行结束后,该播放器还在继续运行。
在命令按钮的click事件中用什么命令能关闭掉这个外部程序?

[此贴子已经被作者于2017-5-21 21:57编辑过]

搜索更多相关主题的帖子: 视频播放器  如何  
2017-05-20 22:04
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:151
帖 子:6028
专家分:26324
注 册:2014-5-20
  得分:7 
2017-05-20 22:44
hepingfly
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:15
帖 子:195
专家分:657
注 册:2015-5-21
  得分:7 
用木瓜的 myfll 也可以。较简单:比如:
set library to myfll
KillprocessByname('外部程序名')
set library to

 

星际花草
2017-05-21 13:11
cqcxy
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-10-16
  得分:0 
表单中调用外部程序的命令如下:
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 =ml_yf+"YFMP\"+trim(thisform.list1.displayvalue)+"."+hz
lpszParams = ""
lpszDir = "c:\temp"
fsshowcmd =1
* 执行ShellExecute命令
LNRETURN = ShellExecute(HWND, lpszOP,lpszFile, lpszParams, lpszDir,fsshowcmd)
问题是:如何确定程序中打开的外部程序是哪一个?
2017-05-21 16:17
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:151
帖 子:6028
专家分:26324
注 册:2014-5-20
  得分:0 
DECLARE LONG CreateProcess IN Kernel32;
    STRING@, STRING@, STRING@, STRING@, LONG, LONG, STRING@, STRING@, STRING@, STRING@
DECLARE LONG TerminateProcess IN Kernel32 LONG, LONG
#DEFINE CREATE_NEW_CONSOLE    0x00000010
szFileName = "c:\windows\system32\notepad.exe"
dhProcess = 0
IF _CreateProcess(szFileName, @dhProcess)
    ? "成功运行 " + szFileName + " 程序"
    ? " 1 秒后自动关闭 " + szFileName + " 程序"
    INKEY(1)
    TerminateProcess(dhProcess, 0)
ENDIF
RETURN

FUNCTION _CreateProcess(szFileName, dhProcess)
    LOCAL stSI, stPI
    stSI = BINTOC(68, "4RS") + REPLICATE(0h00, 64)
    stPI = REPLICATE(0h00, 16)
    IF CreateProcess(@szFileName, NULL, NULL, NULL,;
                     0, CREATE_NEW_CONSOLE, NULL,NULL,;
                     @stSI, @stPI) == 0
        MESSAGEBOX("运行 " + szFileName + " 失败", "提示")
        RETURN .F.
    ENDIF
    dhProcess = CTOBIN(SUBSTR(stPI, 1, 4), "4RS")
    RETURN .T.
ENDFUNC
2017-05-21 17:02
cqcxy
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-10-16
  得分:0 
对于不同电脑而言,视频播放器是不一样的。关闭播放器时,因为这个外部程序的名称无法确定,也就导致不能用“KillprocessByname('外部程序名')”来关闭它。
2017-05-21 22:04
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:151
帖 子:6028
专家分:26324
注 册:2014-5-20
  得分:0 
以下是引用cqcxy在2017-5-21 22:04:29的发言:

对于不同电脑而言,视频播放器是不一样的。关闭播放器时,因为这个外部程序的名称无法确定,也就导致不能用“KillprocessByname('外部程序名')”来关闭它。

“无法确定”的东西又怎能操控它?只能对已知的有所作为。

[此贴子已经被作者于2017-5-22 07:56编辑过]

2017-05-22 07:55
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:78
帖 子:2506
专家分:6092
注 册:2015-3-25
  得分:7 
以下是引用cqcxy在2017-5-21 22:04:29的发言:

对于不同电脑而言,视频播放器是不一样的。关闭播放器时,因为这个外部程序的名称无法确定,也就导致不能用“KillprocessByname('外部程序名')”来关闭它。

有时候,无法确定的东西,也可以变成能确定的东西。如播放视频时,必须要设置 播放器的名称才能播放。在这里,能设置播放器,这个播放器对应开发者来说,是不确定的,但经过你要求设置后,就变成确定的了。
2017-05-22 08:29
cqcxy
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-10-16
  得分:0 
  用RUN命令可以打开已知路径和关联程序的文件,实际应用时我们常常无法确定所需要启动的应用程序的文件名及其绝对路径。比如要打开DOC文件,在无法确定用户的word到底安装在什么地方的时候,RUN命令就无法执行;有时候一种文件格式可以用若干个应用程序打开,比如AVI等视频文件,有人用PotPlayer,也有人用kmplayer等,这时,RUN也没有办法运用。
  前面4楼表单中的一段程序就是用来打开我电脑中关联视频文件的播放器的,在任意电脑上都可以运用。
  虽然自己知道是打开了哪个播放器,但我只知其然,不知其所以然,所以就不知道程序中打开的播放器程序是用什么代码表示的,也就没办法在程序中关闭它。
2017-05-23 20:06
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:151
帖 子:6028
专家分:26324
注 册:2014-5-20
  得分:0 
以下是引用cqcxy在2017-5-23 20:06:13的发言:

  用RUN命令可以打开已知路径和关联程序的文件,实际应用时我们常常无法确定所需要启动的应用程序的文件名及其绝对路径。比如要打开DOC文件,在无法确定用户的word到底安装在什么地方的时候,RUN命令就无法执行;有时候一种文件格式可以用若干个应用程序打开,比如AVI等视频文件,有人用PotPlayer,也有人用kmplayer等,这时,RUN也没有办法运用。
  前面4楼表单中的一段程序就是用来打开我电脑中关联视频文件的播放器的,在任意电脑上都可以运用。
  虽然自己知道是打开了哪个播放器,但我只知其然,不知其所以然,所以就不知道程序中打开的播放器程序是用什么代码表示的,也就没办法在程序中关闭它。

用系统关联默认程序自动打开文件,这个关联的默认程序是可以找到的。
现在的问题是,可能不只一个文件是用这个关联的默认程序打开的,那么到底要关闭哪个才对?这样处理问题带有一定的不确定性、不可操作性、有点盲目性。
建议参考8楼意见,提供一个参数给用户去设定要打开文件所使用的外部程序,这样你就有着落了,就能确定用什么程序打开什么文件,打开和关闭文件就不是问题了。
其实,系统也提供给用户来设置这个打开文件的默认程序,原理都一样。
2017-05-23 20:51







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028341 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved