Ver Mensaje Individual
  #1  
Antiguo 30-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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;
Responder Con Cita