PDA

Ver la Versión Completa : Evitar dobles instancias de una aplicación


dec
30-06-2006, 14:07:53
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í:


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:


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...