Delphi - Una sola instancia de mi aplicacion

 
Vista:

Una sola instancia de mi aplicacion

Publicado por Diego (85 intervenciones) el 29/11/2002 21:57:32
Hola
Quisiera saber cómo se puede evitar que un usuario ejecute más de una instancia de mi aplicación simultaneamente, por favor

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Una sola instancia de mi aplicacion

Publicado por Ernesto D'Spirito (706 intervenciones) el 29/11/2002 22:59:25
Lo más simple es intentar crear un mutex con un nombre único predeterminado en el programa principal. Si la API CreateMutex devuelve un valor distindo de 0 y si no hubo error, entonces es la primera instancia. En caso contrario, simplemente buscamos la ventana de la aplicación con FindWindow y la activamos.

program Project1;

uses
Windows,
Forms,
Unit5 in 'Unit1.pas' {Form1};

var
Mutex, PrevInstance : THandle;

{$R *.RES}

begin
Mutex := CreateMutex(nil, True, PChar('Project5'));
if Mutex <> 0 then
if GetLastError = 0 then begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
if Mutex <> 0 then CloseHandle(Mutex);
end else begin
PrevInstance := FindWindow('TForm1', 'Form1');
if PrevInstance <> 0 then SetForegroundWindow(PrevInstance);
end;
end.

NOTA: Usa nombres "únicos" para el mutex, y para la clase y el título de la ventana de tu aplicación (no uses nombres como "Project1", "TForm1" y "Form1" como usé en el ejemplo pues otra aplicación puede usar esos nombres y tendrás problemas y obtendrás comportamientos no deseados).

Espero que te sirva.

Ernesto D'Spirito
http://www.latiumsoftware.com/es
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar