Mit Delphi kannst du jede beliebige Windows-Anwendung schreiben. Nur für z.B. einen Grafiktreiber wirst du wohl recht viel Assembler brauchen
Dateien nach Inhalt überprüfen geht am besten über Hashes. Ich häng mal eine Hash-
Unit an. Die musst du ins Lib-Verzeichniss von Delphi kopieren und dann in der Uses-Liste von Unit1 hinzufügen. Dann kannst du Hashes (ähnlich wie Quersummen) von Dateien erstellen. Dann brauchst du nur noch die Hashes der verbreitesten Trainer/Cheat-Programmen und liest dann von jeder einzelne Datei auf dem Computer ein, ob sie den selben Hash hat.
Wenn ja --> dann ist ein Trainer gefunden, du musst also die Log-Datei schreiben.
Alle Dateien auf der Festplatte kannst du mit diesen drei Funktionen finden:
Delphi-Quellcode:
procedure getdirsindir(const verzeichniss:string;var dirs:tstringlist);
var
sd:string;
s:tsearchrec;
i:integer;
begin
dirs:=tstringlist.Create;
sd:=dirup(verzeichniss);
if findfirst(sd+'*.*',faanyfile,s)<>0 then begin
sysutils.findclose(s);
exit;
end;
dirs.add(s.Name);
while findnext(s)=0 do
dirs.Add(s.name);
i:=0;
while i<dirs.count do begin
if ((dirs[i]='..') or (dirs[i]='.')) then begin
dirs.Delete(i);
i:=i-1;
end else
if not directoryexists(sd+dirs[i]) then begin
dirs.Delete(i);
i:=i-1;
end;
inc(i);
end;
sysutils.findclose(s);
end;
function getfilesindir(const verzeichniss,filter:string;var files:tstringlist):extended;
var
sd:string;
s:tsearchrec;
i:integer;
e:extended;
flt:string;
begin
if filter='' then
flt:='*.*'
else
flt:=filter;
e:=0;
sd:=dirup(verzeichniss);
result:=0;
files:=tstringlist.Create;
if findfirst(sd+flt,faanyfile,s)<>0 then begin
sysutils.findclose(s);
exit;
end;
files.add(s.Name);
while findnext(s)=0 do begin
files.Add(s.name);
e:=e+s.Size;
end;
i:=0;
while i<files.count do begin
if ((files[i]='..') or (files[i]='.')) then begin
files.Delete(i);
i:=i-1;
end else
if directoryexists(sd+files[i]) then begin
files.Delete(i);
i:=i-1;
end;
inc(i);
end;
result:=e;
sysutils.findclose(s);
end;
function gettreeindir(const root:string;var files,dirs:tstringlist;filter:string):extended;
var
sd:string;
i,j:integer;
fls,unterverzeichnisse:tstringlist;
flt:string;
groesse:extended;
begin
groesse:=0;
if filter='' then
flt:='*.*'
else
flt:=filter;
sd:=dirup(root);
files:=tstringlist.Create;
dirs:=tstringlist.Create;
dirs.Add(sd);
i:=0;
while i<dirs.Count do begin
getdirsindir(dirs[i],unterverzeichnisse);
for j:=0 to unterverzeichnisse.Count-1 do
dirs.Add(dirup(dirs[i])+unterverzeichnisse.Strings[j]);
inc(i);
end;
for i:=0 to dirs.Count-1 do begin
groesse:=groesse+getfilesindir(dirs[i],flt,fls);
for j:=0 to fls.Count-1 do
files.Add(dirup(dirs[i])+fls.strings[j]);
end;
result:=groesse;
end;
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates