求教一个双击文件打开的问题。(200)

  • 主题发起人 主题发起人 popogens
  • 开始时间 开始时间
P

popogens

Unregistered / Unconfirmed
GUEST, unregistred user!
前提:用MC.exe可以打开.cwf文件要求:双击一个.cwf文件,在MC.exe中打开了它。现在我又双击了另一个.cwf文件,需要在同一MC.exe进程中打开,而不要新打开一个MC.exe。急,200分求教,谢谢!
 
我的QQ是455192323,知道请加我,谢谢。口令“大富翁”就行
 
哦,有一个很重要的重点忘了说:请不要用BroadcastSystemMessage,因为360会拦截它,现在电脑很多都装360的,没办法。
 
更改文件的打开方式:HKEY_CLASSES_ROOT下有诸如*,.txt,.pas等等之类的KEY 它的(default)值就是它的文件关联标识 同时也是在HKEY_CLASSES_ROOT下就有一个KEY的名称为它的(default)值 在这个KEY下的 /DefaultIcon为这种类型文件在资源管理里面显示的图标 /shell/open/command 就是这种类型文件所对应的打开文式的应用程序
 
varlphKey: HKEY;sKeyName: string;sKeyValue: string;beginsKeyName := 'myfile';sKeyValue := '我的文档';RegCreateKey(HKEY_CLASSES_ROOT,pchar(sKeyName),lphKey);RegSetValue(lphKey,'',REG_SZ,pchar(sKeyValue),0);sKeyName :='.xyz';sKeyValue := 'myfile';RegCreateKey(HKEY_CLASSES_ROOT,pchar(sKeyName),lphKey);RegSetValue(lphKey,'',REG_SZ,pchar(sKeyValue),0);sKeyName := 'myfile';sKeyValue :='c:/Windows/NotePad.exe %1';RegCreateKey(HKEY_CLASSES_ROOT,pchar(sKeyName),lphKey);RegSetValue(lphKey,'shell/open/command',REG_SZ,pchar(sKeyValue),MAX_PATH);end;---- 建立一新文件,使其扩展名为.xyz,然后双击它看是否是启动记事簿来打开的。 至于是打开一个还是打开两个要你自己程序支持就OK
 
我主要是做到“需要在同一MC.exe进程中打开,而不要新打开一个MC.exe”。楼上的是否能给个例程?只要能实现,简单点就行,谢谢!
 
不好意思,我刚试了你的代码,你只是文件关联,这些我早都做好了。双击了两个xyz文件后,仍然在两个窗口打开,且进程中仍有两个notepad.exe进程。
 
至于只运行一个进程很简单啊,创建时先找下有无已打开的句柄,有的话就就把新打开文件的路径放到消息参数里发过去再退出,老进程处理消息,OVER。
 
哎,这个也难啊?1. 既然做好了文件关联,那么双击的时候自然要执行对应的exe2. 执行exe的时候判断一下,是否已经有相同的exe在执行,若没有,照常, 若有了,得到参数(ParamStr(1)或把所有的参数写入一个文件中待读,因为windows的文件或目录允许有空格的,容易被误认为有多个参数),然后向已经执行的先前的exe发送消息请求打开该文件即可(文件名字已经保存了喔),呵呵
 
楼上的你好(wql),我就是这样做的,但我在向先前的exe发送消息的时候,这个消息被新版的360强行拦截了,我用的就是BroadcastSystemMessage发的,请问还有什么办法发送吗?只要别被360拦了就行,谢谢
 
几位~~说句话
 
SendMessage PostMesage 也不行?
 
好个傻的360,不要怕他,可以以这样:1. 既然做好了文件关联,那么双击的时候自然要执行对应的exe2. 执行exe的时候判断一下,是否已经有相同的exe在执行,若没有,照常, 若有了,得到参数(ParamStr(1)或把所有的参数写入一个文件中待读,因为windows的文件或目录允许有空格的,容易被误认为有多个参数),然后向已经执行的先前的exe发送消息请求打开该文件即可(文件名字已经保存了喔),呵呵 主程序加一个时钟,3秒一次=3000If not FileExists('c:/你的参数文件) then exit;读取你的参数文件里面的参数,调用打开文件功能,即可!呵呵
 
能否给个sendmessage和postmessage的例程?谢谢
 
我查了一下,现版的360之所以不让BroadcastSystemMessage,是因为BroadcastSystemMessage可以关闭360进程,所以只能想别的办法。用360的人太多了,我不得不让路
 
后退
顶部