Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Evitar dobles instancias de una aplicación (https://www.clubdelphi.com/foros/showthread.php?t=80567)

dec 30-06-2006 14:07:53

Evitar dobles instancias de una aplicación
 
Cómo evitar la ejecución de dobles instancias de un programa.

Aunque existen otras maneras, una de las formas más fáciles de evitar dobles instancias de un programa es mediante 'atoms'. Un atom es como una entrada en una lista donde podemos colgar cierta información, por ejemplo, que nuestro programa se encuentra en ejecución.

Lo primero que hay que hacer pues es, al arrancar la aplicación verificar que no esté ya presente, en caso de se encuentre en memoria se avisa al usuario de su despiste y se cierra la instancia. La rutina para verificar la presencia de nuestra aplicación podría ser algo así:

Código Delphi [-]
function TFrom1.InstanciaPrevia: Boolean;
var       AtomText  : array[0..30] of char;
          FoundAtom : TAtom;
begin
  StrFmt(AtomText, 'JustOne%s', ['Nombre Aplicación']);
  FoundAtom := GlobalFindAtom(AtomText);
  Result := (FoundAtom <> 0);
  if Not Result then GlobalAddAtom(AtomText);
end;

Evidentemente, luego al cerrar el programa hay que quitar la 'etiqueta' que nos avisa que estamos en memoria, para ello basta con codificar lo siguiente:

Código Delphi [-]
function TFrom1.QuitarMarcadeInstancia: Boolean;
var       AtomText  : array[0..30] of char;
          FoundAtom : TAtom;
begin
  StrFmt(AtomText, 'JustOne%s', ['Nombre Aplicación']);
  FoundAtom := GlobalFindAtom(AtomText);
  if FoundAtom <> 0 then
     GlobalDeleteAtom(FoundAtom);
end;

AFilth 30-06-2006 14:35:45

Has probado ese código? a mí no me funciona...


La franja horaria es GMT +2. Ahora son las 15:50:49.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi