Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Comprobar si una aplicación ya está ejecutándose - Delphi
Lenguaje de programación Borland Delphi

En este truco impide ejecutar una aplicación dos veces. Con esta utilidad cuando una aplicación esté ejecutándose, no podrá volver a ejecutarse una segunda instancia hasta que se cierre la primera. De esta forma garantizamos que una aplicación sólo se ejecute una vez al mismo tiempo.


Para impedir que una aplicación se ejecute dos veces en el mismo equipo a la vez utilizaremos la función del API de Windows CreateMutex. Con ella desarrollaremos una función que devolverá "True" si la aplicación cuyo título se le pasa como parámetro está ejecutándose ya y "False" si no se está ejecutando:

Uses Windows;

function ejecutadaYa (nombreAplicacion : string) : boolean;
var
  MiMutex : Thandle;
begin
  mimutex := CreateMutex(nil, true, pchar(nombreAplicacion));
  if MiMutex = 0 then
    result := false
  else
  begin
    if GetLastError = ERROR_ALREADY_EXISTS then
      result := true
    else
      result := false;  
  end;
end;
Un ejemplo de utilización de esta función podría ser:
program Campo;

uses
  Forms,
  dialogs,
  windows,
  UnidadMenuPrincipal in 'UnidadMenuPrincipal.pas' {FormMenuPrincipal},
  UnidadProcedimientos in 'UnidadProcedimientos.pas';

{$R *.RES}

var
  nombreaplicacion : string;
begin
  nombreaplicacion := 'Control de Campo';
  if ejecutadaYa (nombreAplicacion) then
  begin
    messagedlg(nombreaplicacion + ' ya está abierta, ' +
        'maximícela desde la barra de tareas de Windows.', mtinformation,
        [mbok],0);
    application.Terminate;
    halt;
    exit;
  end;
  Application.Initialize;
  Application.CreateForm(TFormMenuPrincipal, FormMenuPrincipal);
  Application.Title := 'Control de Campo';
  Application.HelpFile := 'AYUDA.HLP';
  Application.Run;
end.
En este caso la función "ejecutadaYa" se encuenta en la unidad "UnidadProcedimientos.pas", con lo cual se hace una llamada a la misma pasando como parámetro el título/nombre de la aplicación. Si la función devuelve verdadero avisamos al usuario y cerramos la aplicación.

La función "ejcutadaYa" se coloca antes de la cláusula "Application.Initialize", en la unidad .dpr de la aplicación (primera unidad en ejecutarse al iniciar la aplicación, es la que arranca la misma).




Publicado el: 2004-07-24

Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A