📄 unit2.pas
字号:
end;
end;
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Connectform.close;
end;
procedure TMainForm.SpeedButton1Click(Sender: TObject);
var FName: String;
expectedFilename: String;
i: integer;
begin
proceswindow:=TProceswindow.Create(self);
if ProcesWindow.ShowModal=mrOk then
begin
if numberofrecords>0 then
begin
if messagedlg('Keep the current address list?', mtConfirmation, [mbYes, mbNo], 0)=mrNo then
begin
Comments.Memo1.Lines.Text:='';
Numberofrecords:=0;
Updatescreen;
end else updatelist;
end;
if (copy(processlabel.caption,length(processlabel.caption)-11,12)='WINOA386.MOD') or
(copy(processlabel.caption,pos('-',processlabel.caption)+1,13)='MS-DOS Prompt') then
begin
fromaddress.text:='80000000';
toaddress.text:='BFFFFFFF';
dos.checked:=true;
end else
begin
FromAddress.text:='00400000';
ToAddress.text:='7FFFFFFF';
windows.checked:=true;
end;
//-------------NEW SCAN
foundlabel.Caption:='0';
foundlist.Clear;
newscan.Caption:='First Scan';
Groupbox1.Enabled:=true;
for i:=0 to groupbox1.ControlCount-1 do
groupbox1.Controls[i].Enabled:=true;
scanvalue.Enabled:=true;
newscan.Enabled:=true;
nextscanbutton.Enabled:=false;
vartype.Enabled:=true;
scantype.Enabled:=true;
scantext.enabled:=true;
label4.enabled:=true;
label8.Enabled:=true;
HexadecimalCheckbox.Enabled:=true;
scanvalue.visible:=true;
scantext.Visible:=true;
scanvalue.text:='';
checkbox8.Enabled:=true;
cbspeedhack.Enabled:=true;
Updatescantype;
Scantype.ItemIndex:=0;
//-----------------------
//Get the expectedFilename
//-----------------------
if savedialog1.Filename<>'' then exit;
if opendialog1.Filename<>'' then exit;
Fname:=copy(processlabel.caption,pos('-',processlabel.caption)+1,length(processLabel.caption));
if FName[length(FName)-3]='.' then //it's a filename
expectedFilename:=copy(FName,1,length(FName)-4)
else //it's a normal title;
expectedFilename:=FName;
savedialog1.FileName:=expectedFilename;
Opendialog1.FileName:=expectedFilename;
end;
end;
procedure TMainForm.DosClick(Sender: TObject);
begin
FromAddress.text:='80000000';
ToAddress.text:='BFFFFFFF';
end;
procedure TMainForm.WindowsClick(Sender: TObject);
begin
FromAddress.text:='00400000';
ToAddress.text:='7FFFFFFF';
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
scanvalue.text:='';
fromaddress.Text:='00400000';
toaddress.Text:='7FFFFFFF';
isbit:=false;
panel3.DoubleBuffered:=true;
old8087CW:=Get8087CW;
Set8087CW($133f); //for those changingmy code: 133f is NOT meant to be 1337
Memimage:=TMemorystream.Create;
FirstShiftSelected:=-1;
oldwidth:=screen.width;
oldheight:=screen.height;
oldnumberofrecords:=0;
logo.Hint:='Left-click to go to the Cheat Engine Homepage'#13#10+
'Right-click to access the menu';
logo.ShowHint:=true;
numberoflines:=7;
setlength(frozenbox,7);
frozenbox[0]:=checkbox1;
frozenbox[1]:=checkbox2;
frozenbox[2]:=checkbox3;
frozenbox[3]:=checkbox4;
frozenbox[4]:=checkbox5;
frozenbox[5]:=checkbox6;
frozenbox[6]:=checkbox7;
setlength(description,7);
description[0]:=label28;
description[1]:=label9;
description[2]:=label17;
description[3]:=label19;
description[4]:=label33;
description[5]:=label32;
description[6]:=label31;
setlength(address,7);
address[0]:=label23;
address[1]:=label10;
address[2]:=label20;
address[3]:=label21;
address[4]:=label34;
address[5]:=label35;
address[6]:=label36;
setlength(valtype,7);
valtype[0]:=label18;
valtype[1]:=label11;
valtype[2]:=label22;
valtype[3]:=label24;
valtype[4]:=label40;
valtype[5]:=label39;
valtype[6]:=label37;
setlength(value,7);
value[0]:=label13;
value[1]:=label14;
value[2]:=label25;
value[3]:=label26;
value[4]:=label41;
value[5]:=label42;
value[6]:=label43;
setlength(select,7);
select[0]:=label12;
select[1]:=label3;
select[2]:=label16;
select[3]:=label15;
select[4]:=label27;
select[5]:=label29;
select[6]:=label30;
updatescreen;
newaddress:=0;
VarType.ItemIndex:=3;
UpdateScantype;
ScanType.ItemIndex:=0;
end;
procedure TMainForm.ScanTypeChange(Sender: TObject);
begin
updatescantype;
end;
procedure TMainForm.VarTypeChange(Sender: TObject);
var a: int64;
b: double;
c: Integer;
d: single;
hexvis: boolean;
decbitvis: boolean;
hexleft: integer;
hextext: string;
hexwidth: integer;
casevis: boolean;
oldscantype: integer;
error: integer;
temp:string;
begin
hexvis:=true;
hexleft:=187;
hexwidth:=38;
hextext:='Hex';
casevis:=false;
decbitvis:=false;
if not (oldscantype in [smallerthan,biggerthan,exact_value,Advanced_Scan]) then
scantype.itemindex:=0;
//Scantype.itemindex:=0;
case vartype.itemindex of
0: begin //binary
if (hexadecimalcheckbox.visible) then
begin
//convert it was type 0,1,2 or 6
if hexadecimalcheckbox.Checked then
begin
//convert from hex to dec
if length(scanvalue.Text)>0 then
begin
if scanvalue.Text[1]='-' then
val('-$'+copy(scanvalue.text,2,length(scanvalue.Text)),a,error)
else
val('$'+scanvalue.Text,a,error);
end;
end else val(scanvalue.text,a,error);
end;
hexadecimalcheckbox.Checked:=true;
rbdec.checked:=true;
scanvalue.Text:=IntToStr(a);
HexadecimalCheckbox.visible:=false;
decbitvis:=true;
Scantype.itemindex:=0;
end;
1,2,3,4:
begin
casevis:=false;
scanvalue.MaxLength:=0;
if rbdec.visible then
begin
if rbbit.checked then
scanvalue.text:=IntToStr(binToInt(scanvalue.text))
//else keep it the same
end
else
begin
if hexadecimalcheckbox.Checked and hexadecimalcheckbox.Visible then
val('$'+copy(scanvalue.text,1,length(scanvalue.Text)),a,c)
else
val(scanvalue.text,a,c);
scanvalue.Text:=IntToStr(a);
end;
hexadecimalcheckbox.enableD:=true;
hexadecimalcheckbox.Checked:=false;
end;
5: begin //float;
hexvis:=false;
temp:=scanvalue.text;
if rbdec.visible then
begin
//it was a bit
if rbbit.checked then
temp:=IntToStr(binToInt(scanvalue.text))
//else keep it the same
end
else
begin
if hexadecimalcheckbox.visible then
begin
if hexadecimalcheckbox.Checked then
val('$'+copy(scanvalue.text,1,length(scanvalue.Text)),a,c)
else
val(scanvalue.text,a,c);
temp:=IntToStr(a);
end;
end;
hexadecimalcheckbox.Checked:=false;
HexadecimalCheckbox.enabled:=false;
scanvalue.MaxLength:=0;
val(temp,d,c);
Scanvalue.Text:=FloatToStr(d);
end;
6: begin //double
hexvis:=false;
temp:=scanvalue.text;
if rbdec.visible then
begin
//it was a bit
if rbbit.checked then
temp:=IntToStr(binToInt(scanvalue.text))
//else keep it the same
end
else
begin
if hexadecimalcheckbox.visible then
begin
if hexadecimalcheckbox.Checked then
val('$'+copy(scanvalue.text,1,length(scanvalue.Text)),a,c)
else
val(scanvalue.text,a,c);
temp:=IntToStr(a);
end;
end;
hexadecimalcheckbox.Checked:=false;
HexadecimalCheckbox.enabled:=false;
scanvalue.MaxLength:=0;
val(temp,b,c);
Scanvalue.Text:=FloatToStr(b);
end;
7: begin //text
scantype.itemindex:=0;
casevis:=true;
cbCasesensitive.Checked:=true;
cbCasesensitive.ShowHint:=false;
hexadecimalcheckbox.enabled:=true;
hexadecimalcheckbox.checkeD:=cbCaseSensitive.checked;
hexvis:=false;
hextext:='Unicode';
hexleft:=170;
hexwidth:=61;
end;
8: begin //array of byte
scantype.itemindex:=0;
scanvalue.MaxLength:=0;
hexadecimalcheckbox.enableD:=true;
hexadecimalcheckbox.Checked:=true;
for c:=1 to length(scanvalue.Text) do
case scanvalue.text[c] of
'-',' ' : ;
'0'..'9' : ;
'A'..'F' : ;
else begin
scanvalue.text:='';
break;
end;
end;
end;
end;
hexadecimalcheckbox.Caption:=hextext;
hexadecimalcheckbox.left:=hexleft;
hexadecimalcheckbox.Width:=hexwidth;
HexadecimalCheckbox.visible:=hexvis;
rbdec.visible:=decbitvis;
rbbit.Visible:=decbitvis;
cbCaseSensitive.visible:=casevis;
cbfastscan.Enabled:=vartype.ItemIndex in [2..6];
UpdateScanType;
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
if addform=nil then addform:=TAddform.Create(self);
addform.showmodal;
end;
Procedure TMainForm.AddToRecord(line:Integer);
var error: Integer;
Address: Dword;
i,j: Integer;
bit: Integer;
tmp: string;
pc: ^char;
found: boolean;
bitl,nrofbits: integer;
begin
//first check if this address is already in the list!
i:=getvartype;
nrofbits:=length(foundlist.Items[line])-11;
if i=5 then //binary
begin
val(FoundList.Items[line][10],bit,error);
bitl:=nrofbits;
end
else
begin
bit:=0;
bitl:=0;
end;
if i=7 then //text
bit:=length(FoundList.Items[line])-8; //in case of text use the bit record space for length
if i=8 then //array of bytes
begin
//bit will get the number of spaces +1
tmp:=foundlist.Items[line];
pc:=@tmp[9];
bit:=0;
while pc^<>chr(0) do
begin
if pc^=' ' then inc(bit);
inc(pc);
end;
end;
val('$'+FoundList.Items[line],address,error);
found:=false;
for j:=0 to NumberOfRecords-1 do
if (memrec[j].Address=address) and
(i=memrec[j].vartype) and
(bit=memrec[j].Bit) then
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -