Ver Mensaje Individual
  #2  
Antiguo 02-07-2005
marcoev marcoev is offline
Miembro
 
Registrado: may 2003
Ubicación: Nogales, Sonora, Mex.
Posts: 57
Reputación: 22
marcoev Va por buen camino
encontre el siguiente codigo en trucomania

Cita:
Simplemente detectaremos si hay otro ejecutable ejecutándose que se llame igual que el nuestro.

-Añade 'TLHelp32' en el uses de tu form
-Añade esta función en el implementation de la form:

function ProgramaAbiertoDosVeces:Boolean;
var
Datos :TProcessEntry32; {Estructura interna de datos de un proceso}
hID Word; {identificador del proceso}
Snap :Integer;
NombreArchivo :String; {path del archivo original}
Repetido :Boolean; {true si el programa se ha abierto dos veces}
Handle1 :Hwnd; {thandle}
Contador :Integer; {Contador de aperturas}

begin
Contador:=0;
NombreArchivo:=Application.Exename;
Repetido:=False;
GetWindowThreadProcessId(Handle1,@hID);
Snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
try
Datos.dwSize:=SizeOf(Datos);
if(Process32First(Snap,Datos))then
begin
repeat
if NombreArchivo=StrPas(Datos.szExeFile) then
begin
Inc(contador);
if Contador>=2 then Repetido:=true;
end;
until (not(Process32Next(Snap,Datos))) or (Repetido);
end;
finally
Windows.CloseHandle(Snap);
end;
Result:=Repetido;
end;

-Ahora, pon este código en el evento OnCreate de la form principal:

procedure TForm1.FormCreate(Sender: TObject);
begin
if ProgramaAbiertoDosVeces then
begin
showmessage('El programa ha sido abierto mas de una vez');
Application.terminate;
end;
end;
__________________
saludos a todos y gracias por compartir sus conocimientos y experiencias... ;-)
Responder Con Cita