devxlogo

Win API

Win API

Question:
Is there a way under Delphi 3 and 4 to determine if a previous instance of the application is already running?

Answer:
Yes, there is a way to determine if a previous instance of the application is already running. Try the following:

// ===================================================// Called by your project file, prevents a 2nd// instance of the program from executing and// instead activates the already executing instance.// Returns TRUE if a previous instance of the// program is already running.// ===================================================function IsPrevInst: Boolean;var  semName,  appClass: PChar;  hSem    : THandle;  hWndMe  : HWnd;  appTitle: Array[0..MAX_PATH] of Char;begin  // Init  Result := FALSE;  GetMem(semName,15);  GetMem(appClass,15);  StrPCopy(semName,'SemaphoreName');  StrPCopy(appClass,'TApplication');  StrPCopy(appTitle,ExtractFileName(Application.Title));  // Create a Semaphore in memory.  If this is the  // first instance, then hSem's value should be 0.  hSem := CreateSemaphore(nil,0,1,semName);  // Check to see if the semaphore exists  if (hSem <> 0) and (GetLastError() = ERROR_ALREADY_EXISTS) then    begin      CloseHandle(hSem);      // Get the currently executing window's handle then change      // its title so we can look for the other instance      hWndMe := FindWindow(appClass,appTitle);      SetWindowText(hWndMe,'ZZZZZZZ');      // Search for the other instance of this window then bring      // it to the top of the Z-order stack.  We find it by      // matching the Application Class and Application Title.      hWndMe := FindWindow(appClass,appTitle);      if (hWndMe <> 0) then        begin          BringWindowToTop(hWndMe);          ShowWindow(hWndMe,SW_SHOWNORMAL);        end;      Result := TRUE;    end;  // Destroy PChars  FreeMem(semName,15);  FreeMem(appClass,15);end;

Load this code into your project file, and try it out. It’ll detect a previous instance, close the current one, then pop up the previous instance to the top of the Z-order.

See also  Comparing different methods of testing your Infrastructure-as-Code
devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist