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