主题:如何在点击了mp3等类型文件后,让vfp程序启动播放?
zhadalou
[专家分:480] 发布于 2010-04-07 20:27:00
vfp程序打包安装后被设置成mp3等文件的默认播放器,
直接启动vfp程序后,再点击播放按钮,可以打开mp3等文件正常播放,但不启动程序而点击mp3等类型文件,就出错.不知如何是好!
哪位把上面编译的exe程序打包试一试看是怎么回事.
望朋友们给予指教.谢谢!
最后更新于:2010-04-07 20:33:00
回复列表 (共7个回复)
沙发
zhadalou [专家分:480] 发布于 2010-04-11 21:45:00
FOX本色、labxj0769、 lwh1188、 cbl518 诸大师一定有办法的,希望有人挤些时间指点一二,不胜感谢!
板凳
Ilikefox [专家分:5770] 发布于 2010-04-12 00:23:00
哇,程序看起来好复杂,想双击MP3,即刻启动这个叫“可可视听”的软件播放,就像双击一个txt文件,立刻启动记事本打开一样。
其实并不是太难,先要知道双击一个文件,windows都干了什么。windows在注册表中寻找对应文件扩展名的应用程序,然后......
这样说吧,可以理解为windows生成一条带参数的命令行,然后执行。
比如:双击"abc.txt"文件,windows查找注册表知道记事本(notepad.exe)和txt关联,于是生成命令行
notepad <路径>\abc.txt ,然后执行它,这和你在开始菜单的运行对话框,直接输入这条命令一样,只不过仅仅双击鼠标就完成了。
现在看你的程序,你需要在开始位置用parameters语句定义一个参数用来接收windows传来的参数(即双击的那个文件的文件名),然后在某个类的INIT事件中同样用parameters语句定义参数来接收这个文件名,这样在createobject的时候用该函数的第2参数传入文件名进行处理。
俺没有时间细看你的程序,仅仅提供思路,不过倒可以举个小小的实例说明。
Lparameters cFile
Public oForm
If Pcount()=0 &&要考虑直接启动exe时,没有参数的情况。
cFile=""
Endif
On Shutdown Quit
oForm=Createobject("testform",cFile)
oForm.Show
Read Events
Define Class testform As Form
DoCreate = .T.
Caption = "Form1"
Name = "Form1"
Add Object edit1 As EditBox With ;
Height = 240, ;
Left = 0, ;
Top = 0, ;
Width = 372, ;
Name = "Edit1"
Procedure Init
Lparameters cFile
If Empty(cFile) &&同样考虑直接启动exe时,没有参数的情况。
Return
Endif
This.edit1.Value=Filetostr(cFile) &&有参数时的处理
Endproc
Enddefine
上述保存为一个prg,编译为exe。
随便建一个txt文件,里面写一点文字,保存,扩展名改为其它你想的名字(比如.jjj)。双击jjj文件,windows提示选择一个应用程序打开,找到我们的exe,确定。
OK成了,以后双击jjj文件,都会自动用我们的exe打开看。当然也可以直接启动exe。
3 楼
moz [专家分:37620] 发布于 2010-04-12 00:50:00
按道理,应该是修改注册表的。
H_C_R\.mp3
我在Win7下看的是WMP11.AssocFile.mp3
却在XP中看的是Audio.mp3
在Win7导入.reg文件来更改command的值失败 (VFP中无法使用RUN来导入)
在XP中成功修改mp3的默认打开程序 (可以在VFP中使用RUN)
然后我又用右键修改默认应用程序,再试图用导入.reg的方法来恢复,结果失败。
VFP里好像没有直接修改注册表的语句,按道理应该使用VBS脚本,没有时间和精力去尝试。
4 楼
Ilikefox [专家分:5770] 发布于 2010-04-12 01:42:00
moz,这个事情(修改注册表建立文件和应用程序的关联)不必由VFP完成,许多打包安装制作程序都可以轻松搞定。
我看楼主应该是已经利用打包建立关联了,问题是他的程序不接收参数。
5 楼
cbl518 [专家分:57140] 发布于 2010-04-12 01:59:00
你试试看,在表单的init事件写入:
Parameters 你的播放文件变量名
if empt(你的播放文件变量名) and ! File(你的播放文件变量名)
retu
endif
this.播放按钮.click()
6 楼
zhadalou [专家分:480] 发布于 2010-04-12 20:48:00
Ilikefox,moz,cbl518三位老师好!
感谢你们花时间回复我的帖子,我会认真消化的。我的水平确实不行,可能到时候还要麻烦你们。
谢谢了!
7 楼
zhadalou [专家分:480] 发布于 2010-04-13 17:56:00
用Ilikefox老师的“小小的实例”解决了我的难题。感谢你的详细讲解!
我原来不知道windows传来的参数是文件名,太菜了!要好好学。
我来回复