S sypoh Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-21 #1 当双击c:/window/test.txt 打开了我的程序a.exe , 请问a.exe 如何得到c:/window/test.txt?
S sypoh Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-21 #2 当双击c:/window/test.txt 打开了我的程序a.exe , 请问a.exe 如何得到c:/window/test.txt?
R reegon Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-21 #3 先判断这个路径是否存在啊<br>DirectoryExists();<br>ShellExecute(Handle,'',应用程序名,'','',SW_SHOWMAXIMIZED)
S sypoh Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-21 #4 谢谢 reegon<br>不过答非所问<br><br>
张 张鸿林 Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-21 #6 资源管理器/工具/文件夹选项/文件类型/更改<br>其作用如楼上所说<br>如果使用程序更改,打开注册表或调用相应api函数,自己找
S Star5 Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-21 #7 首先,将你的程序关联到txt文件,作为默认打开的程序(修改注册表实现)<br>其次,你的程序读取参数所指的文件就行了<br><br>示例代码如下:<br>procedure TForm1.FormCreate(Sender: TObject);<br>var i:integer;<br>begin<br> memo1.Lines.Clear;<br> if paramcount=0 then //0表示没有参数<br> begin<br> memo1.Lines.Add('程序信息:'+paramstr(0));<br> memo1.Lines.Add('所带参数:没有参数');<br> end else<br> begin //以下是列出所有参数<br> memo1.Lines.Add('程序信息:'+paramstr(0));<br> for i:=1 to paramcount do<br> memo1.Lines.Add('所带参数:'+paramstr(i));<br> end;<br>end;
首先,将你的程序关联到txt文件,作为默认打开的程序(修改注册表实现)<br>其次,你的程序读取参数所指的文件就行了<br><br>示例代码如下:<br>procedure TForm1.FormCreate(Sender: TObject);<br>var i:integer;<br>begin<br> memo1.Lines.Clear;<br> if paramcount=0 then //0表示没有参数<br> begin<br> memo1.Lines.Add('程序信息:'+paramstr(0));<br> memo1.Lines.Add('所带参数:没有参数');<br> end else<br> begin //以下是列出所有参数<br> memo1.Lines.Add('程序信息:'+paramstr(0));<br> for i:=1 to paramcount do<br> memo1.Lines.Add('所带参数:'+paramstr(i));<br> end;<br>end;
W WoDing Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-21 #8 当双击c:/window/test.txt,windows会根据注册表的TXT对应的程序调用,调用的格式和注册表中的有关<br>如果注册表中TXT对应的是:a.exe '%1'<br>windows 就会调用 a.exe c:/window/test.txt;<br>{资源管理器可能使用的就是Shellexecute这一类的命令}<br>这个文件名,可以使用下面的东东来获得:<br>ParamCount//参数的个数<br>ParamStr(0)//就是程序的文件名<br>ParamStr(1)//第1个参数<br>ParamStr//第n个参数<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=2500696
当双击c:/window/test.txt,windows会根据注册表的TXT对应的程序调用,调用的格式和注册表中的有关<br>如果注册表中TXT对应的是:a.exe '%1'<br>windows 就会调用 a.exe c:/window/test.txt;<br>{资源管理器可能使用的就是Shellexecute这一类的命令}<br>这个文件名,可以使用下面的东东来获得:<br>ParamCount//参数的个数<br>ParamStr(0)//就是程序的文件名<br>ParamStr(1)//第1个参数<br>ParamStr//第n个参数<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=2500696
W Walnut_Tom Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-21 #9 paramstr(0) 使用用程序名,paramstr(1) 就是c:/window/test.txt
S sypoh Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-21 #10 如果程序已经打来了, 如何去捕捉paramstr(1)?
S Star5 Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-21 #11 限制程序只运行一份,在限制代码中将本次打开的参数发到已打开的程序里去就行了。
W WoDing Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-21 #12 paramstr是DELPHI提供的一个函数,可以直接使用
爱 爱元元的哥哥 Unregistered / Unconfirmed GUEST, unregistred user! 2005-02-21 #13 让第二份打开的程序去通知已经打开的程序,以前写的例子<br><br>const<br> WM_OPENFILE = WM_USER + 1820; //打开文件消息<br><br>把这个函数加在程序入口处<br>procedure CheckPrevInstance;<br>var<br> PrevWindow: HWND;<br> Atom: TAtom;<br> strParamChar;<br>begin<br> if GlobalFindAtom(PChar('MyGame_IS_RUNNING')) = 0 then<br> begin<br> CheckPreInsAtom := GlobalAddAtom(PChar('MyGame_IS_RUNNING'));<br> end else<br> begin<br> PrevWindow := FindWindow('TfrmMain', pChar('MyGame Caption'));<br> if PrevWindow&gt;0 then begin<br> SetForeGroundWindow(PrevWindow);<br> if ParamCount&gt;0 then<br> strParam:=PChar(ParamStr(1))<br> else<br> strParam:=pChar('');<br> Atom := GlobalAddAtom(strParam);<br> SendMessage(PrevWindow, WM_OPENFILE, 0, Atom);<br> GlobalDeleteAtom(Atom);<br> end else begin<br> Alert('Error:Please Cancellation the System !');<br> end;<br> Halt;<br> end;<br>end;<br><br>public:<br> procedure OpenParam(var Msg:TMessage); message WM_OPENFILE; //打开文件<br><br>//------------------------------------------------------------------------------<br>//打开参数传递的文件<br>//------------------------------------------------------------------------------<br>procedure TfrmMain.OpenParam(var Msg: TMessage);<br>var<br> S: array[0..MAX_PATH] of Char;<br>begin<br> GlobalGetAtomName(Msg.LParam, S, 255);<br> if OpenFile(StrPas(S)) then <br> begin<br> PlayMyFile;<br> end;<br> Self.WindowState:=wsNormal;<br> Self.Show;<br> Self.Enabled:=True;<br>end;
让第二份打开的程序去通知已经打开的程序,以前写的例子<br><br>const<br> WM_OPENFILE = WM_USER + 1820; //打开文件消息<br><br>把这个函数加在程序入口处<br>procedure CheckPrevInstance;<br>var<br> PrevWindow: HWND;<br> Atom: TAtom;<br> strParamChar;<br>begin<br> if GlobalFindAtom(PChar('MyGame_IS_RUNNING')) = 0 then<br> begin<br> CheckPreInsAtom := GlobalAddAtom(PChar('MyGame_IS_RUNNING'));<br> end else<br> begin<br> PrevWindow := FindWindow('TfrmMain', pChar('MyGame Caption'));<br> if PrevWindow&gt;0 then begin<br> SetForeGroundWindow(PrevWindow);<br> if ParamCount&gt;0 then<br> strParam:=PChar(ParamStr(1))<br> else<br> strParam:=pChar('');<br> Atom := GlobalAddAtom(strParam);<br> SendMessage(PrevWindow, WM_OPENFILE, 0, Atom);<br> GlobalDeleteAtom(Atom);<br> end else begin<br> Alert('Error:Please Cancellation the System !');<br> end;<br> Halt;<br> end;<br>end;<br><br>public:<br> procedure OpenParam(var Msg:TMessage); message WM_OPENFILE; //打开文件<br><br>//------------------------------------------------------------------------------<br>//打开参数传递的文件<br>//------------------------------------------------------------------------------<br>procedure TfrmMain.OpenParam(var Msg: TMessage);<br>var<br> S: array[0..MAX_PATH] of Char;<br>begin<br> GlobalGetAtomName(Msg.LParam, S, 255);<br> if OpenFile(StrPas(S)) then <br> begin<br> PlayMyFile;<br> end;<br> Self.WindowState:=wsNormal;<br> Self.Show;<br> Self.Enabled:=True;<br>end;