devxlogo

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  How Engineering Leaders Spot Weak Proposals

Charlie has over a decade of experience in website administration and technology management. As the site admin, he oversees all technical aspects of running a high-traffic online platform, ensuring optimal performance, security, and user experience.

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.