Membuat Single Run Executable

Windows merupakan aplikasi multitasking yang memungkinkan program yang sama berjalan lebih dari satu instance, hal ini secara umum sebenarnya efektif karena memungkinkan user untuk membuka dokumen yang berbeda dengan program yang sama. Contoh yang paling terlihat adalah aplikasi notepad yang terdapat di windows. Namun ada saat-saat tertentu dimana kita ingin menghindari program berjalan secara multiple instance, jadi benar-benar hanya satu aplikasi yang berjalan. Sebenarnya trik untuk hal ini sudah beberapa kali disampaikan dan banyak juga terdapat di internet, namun setiap tahunnya pasti ada saja yang menanyakan kembali cara-nya. Karena itu, saya coba untuk mengarsipkannya menjadi salah satu entri, mudah-mudahan bisa bermanfaat.

Fungsi ini merupakan modifikasi minor atas kode yang dibuat oleh rekan Hi Joen dan source code aslinya bisa didapat pada arsip delphindo.

uses
Windows,
…;

var
MutexHandle: THandle;
hWind: hWnd;

begin
MutexHandle := CreateMutex(nil, TRUE, ”);
if (MutexHandle 0) and
(GetLastError = ERROR_ALREADY_EXISTS) then
begin
CloseHandle(MutexHandle);
hWind := 0;
repeat
hWind := Windows.FindWindowEx(0, hWind, ‘TApplication’,
”);
until (hWind Application.Handle);
if (hWind 0) then
begin
Windows.ShowWindow(hWind, SW_SHOWNORMAL);
Windows.SetForegroundWindow(hWind);
end;
end else
begin
Application.Initialize;
Application.CreateForm(…);
Application.Run;
end;
end.

Sumbernya !!!


About this entry