大虾帮忙!?如何把自己的程序和其他程序关联起来!!(100分)

  • 主题发起人 主题发起人 sytzlh
  • 开始时间 开始时间
S

sytzlh

Unregistered / Unconfirmed
GUEST, unregistred user!
就是当别人运行某一个程序的时候!!自己的程序也跟着运行!!!<br><br>&nbsp; 类似于文件合并机!!<br><br><br>&nbsp; 大哥们帮帮小弟吧!!
 
取自fxb2000的网站:<br><br>另一种程序的自启动方法<br><br>所谓程序自启动,即指在WINDOWS启动过程中一些应用程序的自动运行。要使程序自启动,<br>通常的做法是将应用程序放入AUTOEXEC.BAT、WIN.INI中的“LOAD=”、启动组、注册表中<br>的HEKEY_LOCAL_MACHIE / Software / Microsoft / Windows / CurrentVersion / Run。<br>相对来说,前三种方法较直观,容易被他人更改。而后一种方法相对较隐蔽,一般用户难<br>以更改,所以也是大多数自启动程序采用的方法,象BO等一些黑客程序也是<br>这么做的。但对于WINDOWS较熟悉的用户来说,这最后一种方法也没有多少隐蔽性可言。<br>那么是否还有其他方法呢?经本人研究发现,还有另外一种新的程序自启动方法。<br>在WINDOWS的注册表里有这样一个主键:HEKEY_CLASSES_ROOT / exefile / shell / open<br>&nbsp;/ command 。这一主键的作用是:只要有.exe文件被执行,那么就启动该主键下指定的文<br>件,而本来要执行的.exe文件不被执行。那么我们就可以利用这一点来实现程序的自启动。<br>在程序具体实现的时候有二点要注意,一、由于只要有.exe文件被执行,那么就启动该主<br>键下指定的文件,这样一来就会导致该键值指定的文件被执行多次的情况,因为用户随时可<br>能执行一个.exe文件。二、该主键指定的文件被执行了,但用户本来想执行的文件却未被<br>执行,这样就会破坏系统,使别人以为系统出了问题,这也需在程序中解决。以下本人以<br>DELPHI 5.0为例来实现以上程序的自启动。<br><br>源程序清单:<br><br>unit Unit1;<br><br>interface<br><br>uses<br><br>Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,<br>Registry;<br><br>type<br><br>TForm1 = class(TForm)<br><br>procedure FormCreate(Sender: TObject);<br><br>private<br><br>{ Private declarations }<br><br>public<br><br>{ Public declarations }<br><br>end;<br><br>var<br><br>Form1: TForm1;<br><br>implementation<br><br>{$R *.DFM}<br><br>procedure TForm1.FormCreate(Sender: TObject);<br><br>var<br><br>hMutex:HWND;<br><br>Ret,icount:Integer;<br><br>temp:string;<br><br>reg:tRegistry;<br><br>begin<br><br>//以下是在HEKEY_CLASSES_ROOT / exefile / shell / open / command主键下<br><br>//加入'c:/project1.exe %1 %*'字符串值。以后只要有.exe文件执行就启动<br>C:/PROJECT1.EXE<br><br>//其中后面的“%1 %*”指的是.exe文件执行时所带的命令行参数。<br><br>//注意,为和上面的'c:/project1.exe %1 %*'字符串值配合,将要生成的程序编译为<br>project1.exe<br><br>//且放在C:/ ,这一点请务必注意,以免不必要的麻烦。另外,在interface的uses中加入<br><br>//“ Registry ”以利于进行下面的注册表的操作。<br><br>Reg:=TRegistry.Create;<br><br><br><br>Reg.RootKey:=HKey_CLASSES_ROOT;<br><br>REG.CreateKey ('exefile/shell/open/command');<br><br>REG.OpenKey ('exefile/shell/open/command',false);<br><br>REG.WriteString ('','c:/project1.exe %1 %*');<br><br>REG.CloseKey;<br><br>REG.Free;<br><br>//以下获取命令参数<br><br>if ParamCount&gt;=2 then //若用paramcount函数取得命令行参数个数大于2<br><br>begin<br><br>temp:=ParamStr(1) ;<br><br>For iCount := 2 to ParamCount do //获得所有命令行参数,且用空格连接<br><br>temp:=temp+' '+paramstr(icount);<br><br>end<br><br>else<br><br>begin<br><br>temp:=Paramstr(1);//若只有一个命令行参数。<br><br>end;<br><br>WinExec(pchar(temp),sw_normal );//调用外部程序,且加上命令行所有参数。<br>这样原来准备执//行的.exe文件就被启动了。 <br><br>//以下为防止程序二次启动设的参数<br><br>Application.Title := 'form1';<br><br>hMutex:=CreateMutex(nil,False,'form1');<br><br>Ret:=GetLastError;<br><br>If Ret=ERROR_ALREADY_EXISTS Then<br><br>begin<br><br>ReleaseMutex(hMutex);<br><br>Application.Terminate;<br><br>end;<br><br>//以上为防止程序二次启动,若“project1.exe”被二次启动则终止<br><br>end.<br><br>输入以上程序后按F9编译执行,然后将生成的project1.exe复制到C:/ 。<br>好,现在试着打开任何一个.exe文件,你看到了什么?<br>
 
接受答案了.
 
有一种方法可以把程序的启动指定为跟随另一个exe程序启动啊,你这个办法太差劲,
 
后退
顶部