1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
procedure ActivePreviousInstance;
var ClassName: array[0..255] of char;
Title: string;
HandleTemp : HWND;
begin
Title := Application.Title;
Application.Title := ''; { On change le titre, car on trouverait toujours une application lancée, (la notre). }
try
GetClassName(Application.Handle, ClassName, 255); { Met dans ClassName le nom de la classe de l'application. }
HandleTemp := FindWindow(ClassName, PChar(Title)); { Renvoie le Handle de la 1ère fenêtre de Class (Type) ClassName, et le titre de l'application. }
finally
Application.Title := Title; { Restauration du vrai titre. }
end;
{ Restaurer l'application si minimisée }
ShowWindow(HandleTemp, SW_RESTORE);
{ Mettre la première instance en premier plan : }
SetForegroundWindow(HandleTemp);
{ Fin de la deuxième instance }
end;
function FirstInstanceExists( ActivatePrevious : boolean) : boolean;
begin
SetLastError(NO_ERROR);
CreateMutex (nil, False, PChar(Application.Title));
if GetLastError = ERROR_ALREADY_EXISTS then
begin
if ActivatePrevious then
ActivePreviousInstance;
Result := True;
end
else
Result := False;
end; |
Partager