SER[G]ANT

Вопросы по исходникам CE до версии 5.6

2 сообщения в этой теме

Долго мучаюсь, и никак не могу найти решение.

1) упаковка трейнера (например upx'ом)

Как я понял, за проверку на запакованность отвечает эксепшн в settingsunit.pas



interface

uses windows, forms,classes, SysUtils,dialogs;


var
trainerfile: TFileStream;
protect:boolean;
tempdir: string;

function openself: boolean;

implementation

function openself: boolean;
var temp: integer;
buf: pchar;
begin

getmem(buf,100);
GetTempPath(100,buf);
tempdir:=buf;
freemem(buf);

//use c:\bla.exe till the final build (just to simplify debugging)
try
{$ifdef trainerbeta}
trainerfile:=TFileStream.create('c:\tutorialhack.exe',fmOpenRead or fmShareDenyNone);
{$else}
trainerfile:=TFileStream.create(application.exename,fmOpenRead or fmShareDenyNone);
{$endif}
//find out of this is a patcher or a memorybrowser
trainerfile.Position:=80;

trainerfile.Readbuffer(temp,4);
trainerfile.position:=temp;

trainerfile.ReadBuffer(temp,4);

protect:=temp=$22322;

if temp=$111111 then
result:=true
else
result:=false;

except
result:=false;
messagedlg('There was an error while trying to read the trainer. Or the file got changed(like a exe-compresser), or you''re using an old unpatched version of win 95 or earlier',mterror,[mbok],0);
application.Terminate;
end;

end;

end.
unit settingsunit;

но какое условие отвечает за вывод сообщения при упакованном файле, я тут так и не нашел, может быть я не тут копаю ?

2) Проигрывание .wav файла при нажатии клавиши.

Тут у меня проблема в том, что я так и не понял куда нужно вставлять процедуру (уж очень дофига всего в стандалоне)

Сувал в HotkeyHandler.pas в


var ks: dword;
begin
if key>255 then //not inside the list... (doubt it's valid)
begin
//anyhow, check if it is currently pressed
result:=((word(getasynckeystate(key)) shr 15) and 1) = 1;
exit;
end;

//look up in the list
if keystate[key]=ks_undefined then
begin
ks:=getasynckeystate(key);
if ((ks and 1)=1) then
keystate[key]:=ks_pressed
else
if ((ks shr 15) and 1)=1 then
keystate[key]:=ks_pressed
else
keystate[key]:=ks_notpressed; //not pressed at all
end;

result:=keystate[key]=ks_pressed;
end;
function IsKeyPressed(key: integer):boolean;

нифига...

Сувал в MemoryTrainerUnit.pas в


//....
end;


//indicate that this hotkey got pressed

if userdefinedform<>nil then
begin
for j:=0 to length(userdefinedform.cheat)-1 do
if userdefinedform.cheat[j].cheatnr=i then
begin
userdefinedform.cheat[j].activated:=true;
if userdefinedform.cheat[j].beeponactivate then
dobeep:=true;
end;

for j:=0 to length(userdefinedform.cheatlist)-1 do
userdefinedform.cheatlist[j].Items[i].activated:=true;
end else dobeep:=true; //always beep

if dobeep then beep;

frmMemoryTrainer.clist.Items[i].activated:=true;
//and activate the thread that sleeps 500 ms and keeps the collor to activated when active , and black when not

TSetColorThread.mycreate(i);
end;

end;

результат тот же...

Есть у кого какие идеи по этим вопросам ?

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 Трейнер генерируемый CE  довольно навороченный не там где надо и довольно много мусора в коде - надо всё это переделывать, а уже затем думать над упаковщиком. При чём не просто переделывать, а большие куски убирать.  Не нужен там автоасссемблер, не нужны такие навороты с перехватами нажатий клавиш, не нужна эта VCL - оболочка - густая паутина для какого-то простого трейнера. Эти модификации не очень важны на мой взгляд или вообще не нужны. Раньше я думал автоассемблер, который юзает сгенерированный CE трейнер это круто, теперь я думаю что это очень неудобно. Что можно сделать автоассемблером, а что можно сделать полноценным компилятором C++, который поддерживает те же ассемблерные вставки да ещё и объектно-ориентированный код?! ... 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.