Comprobar si está en ejecución

Tengo una preguntilla, a ver si puedes resolvérmela.
Me gustaría que al abrir un programa, comprobase si otra instancia del mismo se encuentra en ejecución, para así mostrar un mensaje que impida abrirlo.
Es decir, que si ya se está ejecutando, al intentar ejecutarlo de nuevo muestre un error y no permita hacerlo.
¿Cómo puedo hacerlo? ¿Este código deberá ir en el OnCreate del Form principal no?

1 Respuesta

Respuesta
2
Mete este código en el código del proyecto, para lo cual has de habilitar la pestaña de ver código del proyecto, que está en: View->Project Source
program Project1;
Uses
Forms, Windows, Messages,
Unit1 in 'Unit1.pas' {Form1};
const
CM_RESTORE = WM_USER + $1000;
var
RvHandle : hWnd;
{$R *.RES}
begin
{Si existe otra instancia ya ejecutandose, la activamos}
RvHandle := FindWindow('Mi programa Delphi', NIL);
if RvHandle > 0 then
begin
PostMessage(RvHandle, CM_RESTORE, 0, 0);
Exit;
end;
{Sino, haz lo normal}
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
En la declaración de la form, añadiremos este código, (la constante y las dos procedures que hay en la parte public)
const
CM_RESTORE = WM_USER + $1000;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure CreateParams(var Params: TCreateParams); override;
Procedure RestoreRequest(var message: TMessage); message CM_RESTORE;
end;
Y en la implementation de la form, pondremos el código de las dos procedures que hemos definido:
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WinClassName := 'Mi programa Delphi';
end;
procedure TForm1.RestoreRequest(var message: TMessage);
begin
if IsIconic(Application.Handle) = TRUE then
Application.Restore
else
Application.BringToFront;
end;
Espero te sirva de mucho. Cualquier pregunta no dudes en consultar, ..., no te olvides puntuar la pregunta para que esté disponible para los demás.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas