📄 unit2.pas
字号:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,math,
StdCtrls,ceclient, ComCtrls, ExtCtrls, Menus, Buttons,clipbrd, XPMan,registry,debugger,cefuncproc,netapis;
resourcestring
CEnorm = 'Cheat Engine 5.0 client';
CERegion = 'Cheat Engine 5.0 client - Please wait!';
CESearch = 'Cheat Engine 5.0 client - Please wait!';
CERegionSearch = 'Cheat Engine 5.0 client - Please wait!';
CEWait= 'Cheat Engine 5.0 client - Please wait!';
strNoDescription='No description';
strClose='Close';
strStop='Stop';
strOk='OK';
//scanoptions
const
SO_FASTSCAN=$1;
SO_HEXADECIMAL=$2;
SO_READONLY=$4;
SO_FINDONLYONE=$8;
SO_ISBINARY=$10;
SO_UNICODE=$20;
type grouptype = array[1..4] of boolean;
type TSkin = record
Marker: String[6];
backgroundimage: Boolean;
ProcessTextColor: TColor;
Normaltextcolor: TColor;
InvertedNormalTextColor: TColor;
Groupboxcolor: TColor;
Backgroundcolor: TColor;
Selectedrecordcolor: TColor;
Selectedrecordcolor2: TColor;
Textfieldcolor: TColor;
Textfieldbackgroundcolor: TColor;
showHelp: Boolean;
end;
type
TMainForm = class(TForm)
Splitter1: TSplitter;
Panel1: TPanel;
Panel2: TPanel;
SortByFrozenButton: TButton;
SortByDescriptionButton: TButton;
SortByAddressButton: TButton;
SortByTypeButton: TButton;
SortByValueButton: TButton;
Panel3: TPanel;
Label30: TLabel;
Label29: TLabel;
Label12: TLabel;
Label27: TLabel;
Label15: TLabel;
Label16: TLabel;
Label13: TLabel;
Label18: TLabel;
Label23: TLabel;
Label28: TLabel;
Label3: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label14: TLabel;
Label17: TLabel;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
Label24: TLabel;
Label25: TLabel;
Label26: TLabel;
Label31: TLabel;
Label32: TLabel;
Label33: TLabel;
Label34: TLabel;
Label35: TLabel;
Label36: TLabel;
Label37: TLabel;
Label39: TLabel;
Label40: TLabel;
Label41: TLabel;
Label42: TLabel;
Label43: TLabel;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
CheckBox7: TCheckBox;
ScrollBar1: TScrollBar;
Panel4: TPanel;
advancedbutton: TSpeedButton;
CommentButton: TSpeedButton;
Panel5: TPanel;
ProcessLabel: TLabel;
FoundLabel: TLabel;
ScanText: TLabel;
Label4: TLabel;
Label8: TLabel;
LoadButton: TSpeedButton;
SaveButton: TSpeedButton;
SpeedButton1: TSpeedButton;
Logo: TImage;
Label6: TLabel;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
FControl: TEdit;
FoundList: TListBox;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Dos: TRadioButton;
Windows: TRadioButton;
Readonly: TCheckBox;
FromAddress: TMemo;
ToAddress: TMemo;
cbFastScan: TCheckBox;
NewScan: TButton;
NextScanButton: TButton;
ScanType: TComboBox;
VarType: TComboBox;
Button3: TButton;
Button1: TButton;
ProgressBar1: TProgressBar;
HexadecimalCheckbox: TCheckBox;
UndoScan: TButton;
rbBit: TRadioButton;
rbDec: TRadioButton;
scanvalue: TEdit;
cbCaseSensitive: TCheckBox;
PopupMenu2: TPopupMenu;
Deletethisrecord1: TMenuItem;
Browsethismemoryregion1: TMenuItem;
SetHotkey1: TMenuItem;
Freezealladdresses2: TMenuItem;
Unfreezealladdresses1: TMenuItem;
N5: TMenuItem;
Setbreakpoint1: TMenuItem;
Findoutwhatreadsfromthisaddress1: TMenuItem;
sep1: TMenuItem;
Calculatenewvaluepart21: TMenuItem;
N4: TMenuItem;
Cut1: TMenuItem;
Copy1: TMenuItem;
Paste1: TMenuItem;
N1: TMenuItem;
Groupoption1: TMenuItem;
Settonogroup1: TMenuItem;
N2: TMenuItem;
Settogroup11: TMenuItem;
Settogroup21: TMenuItem;
Settogroup31: TMenuItem;
Settogroup41: TMenuItem;
N3: TMenuItem;
Sortaddressesbygroup1: TMenuItem;
PopupMenu1: TPopupMenu;
Browsethismemoryarrea1: TMenuItem;
Removeselectedaddresses1: TMenuItem;
Selectallitems1: TMenuItem;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
TopDisabler: TTimer;
emptypopup: TPopupMenu;
ccpmenu: TPopupMenu;
Cut2: TMenuItem;
Copy2: TMenuItem;
Paste2: TMenuItem;
StatusBar1: TStatusBar;
cbSpeedhack: TCheckBox;
Label52: TLabel;
Edit2: TEdit;
Edit1: TEdit;
Label51: TLabel;
btnSetSpeedhack: TButton;
CheckBox8: TCheckBox;
RadioButton3: TRadioButton;
Findoutwhataccessesthisaddress1: TMenuItem;
FreezeTimer: TTimer;
UpdateTimer: TTimer;
UpdateFoundlisttimer: TTimer;
cbUnicode: TCheckBox;
Label5: TLabel;
Label7: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SpeedButton1Click(Sender: TObject);
procedure DosClick(Sender: TObject);
procedure WindowsClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure VarTypeChange(Sender: TObject);
procedure ScanTypeChange(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure Deletethisrecord1Click(Sender: TObject);
procedure ScrollBar1Change(Sender: TObject);
procedure NewScanClick(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure Layoutsettings1Click(Sender: TObject);
procedure NextScanButtonClick(Sender: TObject);
procedure ValueClick(Sender: TObject);
procedure CommentButtonMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
procedure SpeedButton2Click(Sender: TObject);
procedure CommentButtonClick(Sender: TObject);
procedure SaveButtonClick(Sender: TObject);
procedure LoadButtonClick(Sender: TObject);
procedure FControlEnter(Sender: TObject);
procedure FControlExit(Sender: TObject);
procedure Label28Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure AddressClick(Sender: TObject);
procedure Typeclick(Sender: TObject);
procedure FControlKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FControlKeyPress(Sender: TObject; var Key: Char);
procedure Cut1Click(Sender: TObject);
procedure Copy1Click(Sender: TObject);
procedure Paste1Click(Sender: TObject);
procedure Calculatenewvaluepart21Click(Sender: TObject);
procedure PopupMenu2Popup(Sender: TObject);
procedure SettogroupXClick(Sender: TObject);
procedure Settonogroup1Click(Sender: TObject);
procedure Freezealladdresses2Click(Sender: TObject);
procedure Unfreezealladdresses1Click(Sender: TObject);
procedure Panel1Resize(Sender: TObject);
procedure Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure slectItem(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure CheckBox2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ScrollBar1Enter(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Browsethismemoryarrea1Click(Sender: TObject);
procedure Browsethismemoryregion1Click(Sender: TObject);
procedure scanvalueKeyPress(Sender: TObject; var Key: Char);
procedure CheckBox8Click(Sender: TObject);
procedure cbSpeedhackClick(Sender: TObject);
procedure btnSetSpeedhackClick(Sender: TObject);
procedure RadioButton3Click(Sender: TObject);
procedure Setbreakpoint1Click(Sender: TObject);
procedure Findoutwhatreadsfromthisaddress1Click(Sender: TObject);
procedure Findoutwhataccessesthisaddress1Click(Sender: TObject);
procedure advancedbuttonClick(Sender: TObject);
procedure Label5Click(Sender: TObject);
procedure Label7Click(Sender: TObject);
private
{ Private declarations }
numberoflines: integer;
frozenbox: array of TCheckbox;
description: array of TLabel;
address: array of TLabel;
ValType: array of TLabel;
Value: array of TLabel;
Select: array of TLabel;
oldwidth,oldheight: integer;
newaddress: Dword;
isbit: boolean;
old8087CW: word;
procedure LoadDefaultSkin;
procedure copySelectedRecords;
procedure Paste;
procedure setfoundlisthorizontal;
procedure WMGetMinMaxInfo(var Message: TMessage); message WM_GETMINMAXINFO;
procedure SetWriteBreakpoint(address:dword;size: integer);
procedure SetReadBreakpoint(address:dword;size: integer);
procedure SetReadWriteBreakpoint(address:dword;size: integer);
public
{ Public declarations }
Advanced: boolean;
ProcessOpened: boolean;
max: integer;
buffersize: dword;
opening: string;
numberofrecords,oldNumberOfRecords,oldcodelistcount: Integer;
memrec: array of Memoryrecord;
oldmemrec: array of Memoryrecord;
oldcomments: string;
values: array of String[255];
Hotkeystrings: Array of string;
Hotkeys: array of integer;
selected: array of Boolean;
lastselected: Integer;
LastLastSelected: Integer;
FirstShiftSelected: Integer;
lag: Integer;
skin: TSkin;
MemImage: TMemoryStream;
CheatEngineDir: String;
updatetimerspeed,freezetimerspeed: integer;
Procedure AddToRecord(line:Integer);
procedure updatescreen;
procedure Updateskin;
procedure Deleterecords;
procedure Deletegroups(groups: grouptype);
procedure UpdateScantype;
procedure UpdateList;
procedure ShowValues;
function CheckIfSaved: boolean;
procedure Resync;
procedure ReserveMem;
procedure Addaddress(description: string; address:dword; const offsets: array of dword; offsetcount: integer; ispointer: boolean; vartype: integer; length: integer; startbit:integer; unicode,showashex: boolean);
end;
var
MainForm: TMainForm;
Skip_PAGE_NOCACHE: Boolean;
implementation
uses processwindow, Unit1, changetimerunit, TypePopup, addformunit,
commentsunit, layoutunit, Unit3, Standaloneunit, Changeoffsetunit,
formsettingsunit, MemoryBrowserFormUnit,formscanningunit,opensave,
FoundCodeUnit, AdvancedOptionsUnit,mainunit2;
{$R *.DFM}
procedure TMainForm.WMGetMinMaxInfo(var Message: TMessage);
var MMInfo: ^MINMAXINFO;
begin //the constraint function of the form behaves weird when draging from the top or left side, so I have to do this myself.
MMInfo:=ptr(message.LParam);
MMInfo.ptMinTrackSize:=point(515,501);
end;
procedure TMainform.ShowValues;
var i,rec: integer;
begin
for i:=0 to numberoflines-1 do
begin
rec:=scrollbar1.Position+i;
if rec<numberofrecords then
begin
value[i].Caption:=values[rec];
end;
end;
end;
procedure TMainform.setfoundlisthorizontal;
var i,maxwidth,chars,maxchars: integer;
begin
maxwidth:=0;
maxchars:=0;
for i:=0 to foundlist.Items.Count-1 do
begin
chars:=length(foundlist.Items[i]); //faster than 2 time retrieving
if chars>maxchars then
begin
maxchars:=chars;
end;
end;
foundlist.ScrollWidth:=8*maxchars;
end;
procedure TMainForm.ReserveMem;
begin
setlength(memrec,numberofrecords);
setlength(values,NumberOfRecords);
setlength(selected,numberofrecords);
setlength(hotkeystrings,NumberOfRecords);
setlength(Hotkeys,numberofrecords);
end;
procedure TMainForm.resync;
var i,j,datasend: integer;
begin
output[0]:=6; //clear record list
sendbuf(1);
//put all adresses back
for i:=0 to numberofrecords-1 do
begin
//if (i mod 2000)=0 then sleep(lag*4); //resync should be made safe so a lof of sleeping...
output[0]:=CS_AddAddress;
pdword(@output[1])^:=memrec[i].Address;
case memrec[i].VarType of
0: output[5]:=1;
1: output[5]:=2;
2: output[5]:=4;
3: output[5]:=4;
4: output[5]:=8;
5: output[5]:=memrec[i].bitlength div 8+1;
6: output[5]:=8;
7: output[5]:=memrec[i].Bit;
8: output[5]:=memrec[i].bit;
end;
sendbuf(6);
end;
//and freeze the frozen ones
//the client should have received the values before the desync
for i:=0 to numberofrecords-1 do
begin
if memrec[i].Frozen then
begin
if (values[i]<>'NYA') and (values[i]<>'??') then
begin
output[0]:=CS_FREEZEADDRESS; //freeze address
pword(@output[1])^:=i;
sendbuf(3);
end;
end;
end;
end;
procedure TMainForm.copySelectedRecords;
var clip: TClipboard;
textform: string;
i: Integer;
begin
//
clip:=TClipboard.Create;
textform:='CETables-';
// textform:='aaa'+chr(13)+'FFFFFF'+chr(13)+'DWORD'+chr(13); there can only be an CR when hex editing the savetable.
for i:=0 to numberofrecords-1 do
begin
if selected[i] then
textform:=textform+memrec[i].Description+chr(13)+'$'+IntTohex(memrec[i].Address,8)+chr(13)+IntToStr(memrec[i].VarType)+chr(13);
end;
clip.SetTextBuf(pchar(textform)); //text address type
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -