본문 바로가기
IT/델파이

Delphi 프로그램을 자동으로 종료하는 방법

by 불멸남생 2024. 7. 30.

Delphi 프로그래밍 언어는 다양한 애플리케이션을 개발하는 데 사용되며, 그 중에서도 프로그램을 자동으로 종료하는 기능은 매우 중요합니다. 이 글에서는 Delphi의 VCL(Visual Component Library) 및 FMX(FireMonkey) 애플리케이션에서 프로그램을 종료하는 다양한 방법을 상세히 설명하겠습니다. 이를 통해 Delphi 프로그램을 사용자의 인터랙션 없이도 자동으로 종료할 수 있는 방법을 배우게 될 것입니다.

VCL 애플리케이션에서 프로그램 종료

Application.Terminate 메서드 사용

Delphi VCL 애플리케이션에서 가장 간단하게 프로그램을 종료하는 방법은 Application.Terminate 메서드를 사용하는 것입니다. 이 메서드는 애플리케이션의 메시지 루프를 종료하고 모든 창을 닫아 애플리케이션을 종료합니다.

반응형
procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.Terminate;
end;

폼 닫기

또한, 특정 폼을 닫는 Close 메서드를 사용할 수도 있습니다. 메인 폼이 닫히면 애플리케이션도 함께 종료됩니다.

procedure TForm1.Button2Click(Sender: TObject);
begin
  Close;
end;
반응형

일정 시간 후 자동 종료

타이머 컴포넌트를 사용하여 일정 시간이 지난 후 프로그램을 자동으로 종료할 수도 있습니다.

  1. 폼에 TTimer 컴포넌트를 추가합니다.
  2. 타이머의 Interval 속성을 설정합니다. (예: 5000ms = 5초)
  3. 타이머의 OnTimer 이벤트 핸들러를 작성합니다.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Application.Terminate;
end;

이렇게 설정하면 타이머가 실행된 후 일정 시간이 지나면 프로그램이 자동으로 종료됩니다.

반응형

FMX 애플리케이션에서 프로그램 종료

Application.Terminate 메서드 사용

FMX 애플리케이션에서도 Application.Terminate 메서드를 사용하여 프로그램을 종료할 수 있습니다.

procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.Terminate;
end;

폼 닫기

FMX에서도 폼을 닫아 프로그램을 종료할 수 있습니다.

procedure TForm1.Button2Click(Sender: TObject);
begin
  Close;
end;
반응형

일정 시간 후 자동 종료

FMX 애플리케이션에서도 타이머 컴포넌트를 사용하여 일정 시간이 지난 후 프로그램을 자동으로 종료할 수 있습니다.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Application.Terminate;
end;

예제 코드

아래는 두 개의 버튼과 하나의 타이머를 이용하여 프로그램을 자동으로 종료하는 예제 코드입니다. 첫 번째 버튼을 클릭하면 Application.Terminate가 호출되어 애플리케이션이 종료되고, 두 번째 버튼을 클릭하면 폼이 닫히고, 타이머가 설정된 시간이 지나면 Application.Terminate가 호출되어 애플리케이션이 자동으로 종료됩니다.

반응형
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Application.Terminate;
end;

end.

위의 코드 예제에서는 두 개의 버튼과 하나의 타이머가 있습니다. 첫 번째 버튼을 클릭하면 Application.Terminate가 호출되어 애플리케이션이 종료됩니다. 두 번째 버튼을 클릭하면 폼이 닫히고, 타이머가 설정된 시간(예: 5초)이 지나면 Application.Terminate가 호출되어 애플리케이션이 자동으로 종료됩니다.

반응형

추가적인 방법

시스템 명령을 통한 종료

Delphi에서 시스템 명령을 호출하여 프로그램을 종료할 수도 있습니다. 예를 들어, ExitProcess API를 사용할 수 있습니다.

uses
  Windows;

procedure TForm1.Button3Click(Sender: TObject);
begin
  ExitProcess(0);
end;

프로세스 강제 종료

또 다른 방법으로는 현재 프로세스를 강제로 종료하는 것입니다. 이는 다소 극단적인 방법이지만 필요할 때 유용할 수 있습니다.

반응형
uses
  TlHelp32, PsAPI;

procedure KillProcess(ProcessName: string);
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  while Integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(FProcessEntry32.szExeFile) = UpperCase(ProcessName)) or
      (UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ProcessName))) then
      TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0);
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  KillProcess('YourApplication.exe');
end;

이 코드는 현재 실행 중인 프로세스를 찾아 강제로 종료합니다.

반응형

결론

Delphi에서 프로그램을 자동으로 종료하는 방법은 여러 가지가 있습니다. Application.Terminate 메서드를 사용하는 기본적인 방법부터 타이머를 이용한 자동 종료, 시스템 명령 호출, 그리고 프로세스 강제 종료까지 다양한 방법을 살펴보았습니다. 이러한 방법들을 적절히 활용하여 Delphi 애플리케이션의 종료 로직을 구현할 수 있습니다.

반응형