Ver Mensaje Individual
  #6  
Antiguo 02-03-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Cita:
Empezado por roman
¿Y qué pasa si hago una copia del programa y le cambio de nombre?
Pues que no seria el mismo programa, si no una copia del mismo.

Ahora en serio, no tiene sentido andar moviendo los programas de sitio y esperar que funcionen bien. Así que pasaría lo que tiene que pasar, no funcionaria.

Ahora bien, que queremos hacer la súper aplicación a prueba de balas. Pues se hace, que a mi a matar moscas a cañonazos no me gana nadie
Código Delphi [-]
uses PsApi, Hashes;

function FSize(Path: String): Int64;
var
  SearchRec: TSearchRec;
begin
  if FindFirst(Path,faAnyFile,SearchRec) = 0 then
    Result:= SearchRec.Size
  else
    Result:= -1;
  FindClose(SearchRec);
end;

function CuantosSomos: Integer;
var
  Procesos: array[1..1024] of DWORD;
  Needed, i: DWORD;
  Process: THandle;
  ModName: array[0..MAX_PATH] of Char;
  Size: int64;
  Hash: String;
begin
  Result:= 0;
  Size:= FSize(ParamStr(0));
  Hash:= CheckSum(ParamStr(0));
  if EnumProcesses(@Procesos,SizeOf(Procesos),Needed) then
  begin
    for i:= 1 to (Needed div Sizeof(DWORD)) do
    begin
      Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
        FALSE,Procesos[i]);
      if Process <> 0 then
      begin
        if GetModuleFileNameEx(Process,0,ModName,SizeOf(ModName)-1)>0  then
        begin
          if Size = FSize(String(ModName)) then
            if CheckSum(String(ModName)) = Hash then
              inc(Result);
        end;
        CloseHandle(Process);
      end;
    end;
  end;
end;

La unit hashes se encuentra aquí
http://www.clubdelphi.com/foros/show...22&postcount=4

Última edición por seoane fecha: 04-03-2007 a las 02:33:28.
Responder Con Cita