RE:Una sola instancia de mi aplicacion
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