📄 mainunit.pas
字号:
{
name:(1999.12.1 -jhx1)
江湖行 II jhx2
2002.10.13 renamed to 'GamePaladin II'
CopyRight:XuGanQuan gqxunet#163.com
Description:A game cheat tool
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
}
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ToolWin, ImgList, ExtCtrls, Buttons, StdCtrls, Menus,
Gauges, Grids, XPMan,mmsystem, OleCtrls, shlobj,comobj,activex,shellapi,SHDocVw,Registry;
resourcestring
String_notask='没有内存搜索任务;请新建加入;';
String_Addtask='没有内存搜索任务;现在就创建加入吗?';
String_Addtasktitle='没有任务信息';
String_noresult='搜索次数: 0 , 找到数目:0 ';
String_NoResultAgain='抱歉,找不到任何匹配的地址,是否再次搜索?';
String_NoResultAgainTitle='无结果信息';
String_TypeNoMatch='输入的类型不匹配上次类型(高阶/低阶),'+
'你想进行新类型的搜索吗? ';
String_TypeNoMatchTitle='输入的类型不匹配信息';
String_ScanResult='搜索次数:%d , 找到数目:%d ';
String_ByteType='Byte Type';
String_WordType='Word Type';
String_DWordType='DWord Type';
String_Int64Type='Int64 Type';
String_SingleType='Single Type';
String_DoubleType='Double Type';
String_StringType='Text Type';
String_applying='有效';
String_noapplying='不可用';
String_invalidSave='不能载入该文件,请检查是否为江湖行II(Game Paladin II)的存档文件';
String_AskRepeatInitLowLevel='已经进行了初始化内存的低阶搜索,'#13#10+
'是否再次初始化?';
String_AskRepeatInitLowLevelTitle='内存低阶搜索重复初始化信息';
String_InScan='当前的任务正在进行,请等待.';
String_InScanTitle='任务进行信息';
String_Taskinvalid='对应的进程/应用程序已经关闭. ';
String_Maxtask='最多加入 %d 个任务,请删除部分无用的任务;';
String_NeedSeletedtask='请选择一个已有的任务.';
String_NotSethotkey1='主窗口弹出热键不合法或者该热键已经被另一程序占用;请重新设置.';
String_NotSethotkey2='抓图热键不合法或者该热键已经被另一程序占用.请重新设置';
string_setok='成功应用新的选项.';
String_selectdir='请选择一个目录:';
type
TMainForm = class(TForm)
MainImageList: TImageList;
MainPageControl: TPageControl;
MyFavorites_TS: TTabSheet;
MemoryScan_TS: TTabSheet;
archiveEdit_TS: TTabSheet;
CapPic_TS: TTabSheet;
Main_cb: TCoolBar;
Main_TB: TToolBar;
MemEdit_TB: TToolButton;
archiveEdit_TB: TToolButton;
CapPic_TB: TToolButton;
SetOptions_TB: TToolButton;
Help_TB: TToolButton;
MyFavorite_TB: TToolButton;
GameRecord_TB: TToolButton;
GameRecord_TS: TTabSheet;
SET_TS: TTabSheet;
help_TS: TTabSheet;
temp_Panel1: TPanel;
Panel1: TPanel;
Splitter1: TSplitter;
MiddleImageList: TImageList;
taskListPopupMenu: TPopupMenu;
delTasks_Menu: TMenuItem;
N2: TMenuItem;
ClearAlltasks_menu: TMenuItem;
FoundPopMenu: TPopupMenu;
FoundMem_Memu: TMenuItem;
FoundAdd_memu: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
EditLock_Memu: TMenuItem;
Panel4: TPanel;
LockPopMenu: TPopupMenu;
LockMod_memu: TMenuItem;
LockAddress_menu: TMenuItem;
N7: TMenuItem;
LockRemove_menu: TMenuItem;
N9: TMenuItem;
Panel5: TPanel;
AddNew: TPopupMenu;
New1_menu: TMenuItem;
N3: TMenuItem;
new2_menu: TMenuItem;
Lock_Clear: TMenuItem;
openLockRecordDialog: TOpenDialog;
SaveLockRecordDialog: TSaveDialog;
Lockcopy_memu: TMenuItem;
Lockpaste_menu: TMenuItem;
N6: TMenuItem;
ImageList1: TImageList;
DisplayProcess: TTimer;
XPManifest1: TXPManifest;
Options_TreeView: TTreeView;
Option_ImageList: TImageList;
Options_PageControl: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
GroupBox1: TGroupBox;
Label2: TLabel;
Label3: TLabel;
Set_1_RB1: TRadioButton;
Set_1_RB2: TRadioButton;
Set_1_RB3: TRadioButton;
Set_1_RB4: TRadioButton;
set_FromEdit: TEdit;
Set_toEdit: TEdit;
GroupBox2: TGroupBox;
Label5: TLabel;
Lock_Frequency_LB: TLabel;
Lock_TrackBar: TTrackBar;
TabSheet3: TTabSheet;
Set_1_OK: TButton;
Label4: TLabel;
Main_HotKey: THotKey;
Capture_HotKey: THotKey;
SaveWay_RG: TGroupBox;
SaveMode1: TRadioButton;
SaveMode2: TRadioButton;
CaptureSavepath_Edit: TEdit;
SaveMode3: TRadioButton;
Label8: TLabel;
Set_2_ok: TButton;
Help_popMenu: TPopupMenu;
Content1: TMenuItem;
Homepage1: TMenuItem;
N1: TMenuItem;
About1: TMenuItem;
GroupBox3: TGroupBox;
EnabledAlphaBlend_cb: TCheckBox;
Alphablend_TrackBar: TTrackBar;
set_autoRun: TCheckBox;
Support1: TMenuItem;
Makeappshortcut: TButton;
Label6: TLabel;
Label7: TLabel;
Label9: TLabel;
path_bn: TButton;
ToolBar1: TToolBar;
newtask_TB: TToolButton;
deltask_tb: TToolButton;
MainPanel2: TPanel;
Scan_bn: TSpeedButton;
InputHelp_SB: TSpeedButton;
backtogame_bn: TSpeedButton;
Value_Edit: TEdit;
VarType_CB: TComboBox;
Panel3: TPanel;
StaticText1: TStaticText;
Task_info_Name_LB: TStaticText;
Task_Info_SearchResult_LB: TStaticText;
Scan_Gauge: TGauge;
Found_LV: TListView;
Panel6: TPanel;
ToolBar4: TToolBar;
SelMemEdit_TB: TToolButton;
AddToLock_Tb: TToolButton;
EditAddress_tb: TToolButton;
lockRemove_TB: TToolButton;
OpenLockRecord_TB: TToolButton;
SaveLockRecord_TB: TToolButton;
Splitter2: TSplitter;
Lock_LV: TListView;
Panel2: TPanel;
tasks_LV: TListView;
procedure FormCreate(Sender: TObject);
procedure deltask_tbClick(Sender: TObject);
procedure newtask_TBClick(Sender: TObject);
procedure Scan_bnClick(Sender: TObject);
procedure InputHelp_SBClick(Sender: TObject);
procedure VarType_CBChange(Sender: TObject);
procedure tasks_LVClick(Sender: TObject);
procedure Value_EditKeyPress(Sender: TObject; var Key: Char);
procedure SelMemEdit_TBClick(Sender: TObject);
procedure tasks_LVEdited(Sender: TObject; Item: TListItem;
var S: String);
procedure ClearAlltasks_menuClick(Sender: TObject);
procedure EditAddress_tbClick(Sender: TObject);
procedure FoundMem_MemuClick(Sender: TObject);
procedure Found_LVDblClick(Sender: TObject);
procedure EditLock_MemuClick(Sender: TObject);
procedure New1_menuClick(Sender: TObject);
procedure Lock_LVDblClick(Sender: TObject);
procedure Found_LVMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure LockRemove_menuClick(Sender: TObject);
procedure FoundAdd_memuClick(Sender: TObject);
procedure Lock_ClearClick(Sender: TObject);
procedure LockAddress_menuClick(Sender: TObject);
procedure Lock_LVEdited(Sender: TObject; Item: TListItem;
var S: String);
procedure Lock_LVMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SaveLockRecord_TBClick(Sender: TObject);
procedure OpenLockRecord_TBClick(Sender: TObject);
procedure Lockcopy_memuClick(Sender: TObject);
procedure Lockpaste_menuClick(Sender: TObject);
procedure Set_1_RB1Click(Sender: TObject);
procedure Set_1_RB2Click(Sender: TObject);
procedure Set_1_RB3Click(Sender: TObject);
procedure Set_1_RB4Click(Sender: TObject);
procedure Lock_TrackBarChange(Sender: TObject);
procedure MyFavorite_TBClick(Sender: TObject);
procedure MemEdit_TBClick(Sender: TObject);
procedure archiveEdit_TBClick(Sender: TObject);
procedure CapPic_TBClick(Sender: TObject);
procedure SetOptions_TBClick(Sender: TObject);
procedure Help_TBClick(Sender: TObject);
procedure backtogame_bnClick(Sender: TObject);
procedure tray_minClick(Sender: TObject);
procedure DisplayProcessTimer(Sender: TObject);
procedure GameRecord_TBClick(Sender: TObject);
procedure Options_TreeViewClick(Sender: TObject);
procedure Set_1_OKClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Set_2_okClick(Sender: TObject);
procedure EnabledAlphaBlend_cbClick(Sender: TObject);
procedure Alphablend_TrackBarChange(Sender: TObject);
procedure set_autoRunClick(Sender: TObject);
procedure MakeappshortcutClick(Sender: TObject);
procedure About1Click(Sender: TObject);
procedure path_bnClick(Sender: TObject);
procedure Homepage1Click(Sender: TObject);
procedure Support1Click(Sender: TObject);
private
//FSaveEditForm:TSaveEditForm;
{ Private declarations }
public
function NameToCode(RegName:String;out RegString:String):Boolean;
function SelectDir(ParentHWnd: HWnd; const Root: WideString; out Directory: string): Boolean;
function HotKeyToShortCut(mode,value:UINT):TShortCut;
function ShortCutToHotKey_Mode(Value: TShortCut):UINT;
function ShortCutToHotKey_Value(Value: TShortCut):UINT;
procedure WMhotkeyhandle(var msg:Tmessage); message wm_hotkey;
Procedure UpdateTaskInfo(theIndex:integer);
Procedure AddTasktoList(theIndex:integer);
Procedure AddFoundToListView(theIndex:integer);
Procedure UpdateLockInfo(theIndex,theListIndex:integer);
Function CheckForScan:boolean;
procedure RaiseInputError;
procedure SaveOptions;
{ Public declarations }
end;
type
MyOption=record
WhichPage:Byte;
AlphaBlend:byte;
AlphaBlendValue:byte;
MainHotKey_mode:UINT;
MainHotKey_value:UINT;
ScanAddressMode:byte;
DefaultFromAddress:Dword;
DefaultToAddress:Dword;
CaptureSaveMode:byte;
CaptureSavePath:String[255];
CaptureHotKey_mode:UINT;
CaptureHotKey_value:UINT;
setActivePage:Byte;
Lock_Interval:Word;
FormWidth:WORD;
FormHeigth:WORD;
end;
type
TTimerThread=class(TThread)
private
procedure ProcessLock;
protected
procedure Execute; override;
public
constructor Create;
end;
var MainForm: TMainForm;
ErrorInputNum:Byte;
Apppath:String;
String_GPSAVE:string[$30];
GPOptions:MyOption;
Lock_Enable:Boolean;
HotKeyID_Main:Integer;
HotKeyID_Capture:Integer;
implementation
uses GetProcessIDUnit,GPKernel, InputhelpUnit, MemEditUnit, MemRecordUnit,
MyCalcUnit,CapturePicUnit, GameRecordUnit,MyfavoritesUnit,
ArchiveEditUnit, HelpWebBrowserUnit, RegisterUnit;
{$R *.dfm}
function TmainForm.NameToCode(RegName:String;out RegString:String):Boolean;
var i,index,strlen:Integer;
TempNum:BYTE;
EncryptArray:array[1..20] of BYTE;
const EncryptString:array[0..20] of String[21]=
('GreatXGQGamePaladinII',
'asdasda$%^&*24tsgd6gf',
'AAGUYXLKjljhda^*(dfs9',
')(*&^*()__jnMfcdlsaDJ',
'&jldffggdfg****dasdff',
'345874fBNNKhdfll;~1!2',
'>>.,f....,cwe%TGhj3rf',
'^&&(*ncfg0nldskf4tl$$',
'fgvfdsg fgfdgdg fa!',
'HOw fdo you trun this',
'What do you want fwgg',
'MUYN c~3490&68xn7DT8O',
'GBEKEGm )(845+_F_FGHH',
'6C35CBV6BN88UCF3C346V',
'165CVCBNM09FVN,O6/.,B',
'7U6HFR6YHLO9@~L`~~ ',
'T5VBNMynmCFMVM4Clku^#',
'TBNBVCXVBVCVBN9CTOVVB',
'ytiuB,Uuyg,/*&%TYJ;LK',
'FHVUIJ5098CK;;3C905OP',
'CV436-40J60VCCKLMZ%^&'
);
const Validstring='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
begin
Result:=false;
RegString:='';
strlen:=Length(RegName);
if strlen<4 then exit;
/////key change//////////
TempNum:=0;
for i:=1 to strlen do TempNum:=TempNum+Ord(RegName[i]);
tempNUm:=abs(tempNum);
index:=TempNum mod 21;
///////fix length//////
if strlen<10 then RegName:=RegName+Copy(Validstring,1,10-strlen) else
RegName:=Copy(RegName,1,10);
TempNum:=1;
for i:=1 to 10 do
begin
TempNum:=TempNum*((Ord(RegName[i]) mod 21)+1);
end;
DEC(TempNum,strLen);
tempNUm:=abs(tempNum);
inc(index,TempNum);
index:=index mod 21;
for i:=1 to 10 do EncryptArray[i]:=Ord(EncryptString[index][i]);
for i:=1 to 10 do
begin
if i=6 then RegString:=RegString+'-';
TempNum:=Ord(RegName[i]) xor EncryptArray[i];
if (Pos(chr(TempNum),Validstring)>0) then RegString:=RegString+chr(TempNum) else
begin
TempNum:=TempNUm mod 36; ///36 letter mod :=0.. 35
RegString:=RegString+Validstring[TempNum+1];
end;
end;
Result:=True;
end;
function TmainForm.SelectDir(ParentHWnd: HWnd; const Root: WideString;
out Directory: string): Boolean;
var
BrowseInfo: TBrowseInfo;
Buffer: PChar;
//RootItemIDList: PItemIDList;
ItemIDList: PItemIDList;
ShellMalloc: IMalloc;
//IDesktopFolder: IShellFolder;
//Eaten, Flags: LongWord;
begin
Result := False;
Directory := '';
FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);
if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then
begin
Buffer := ShellMalloc.Alloc(MAX_PATH);
try
//SHGetDesktopFolder(IDesktopFolder);
//IDesktopFolder.ParseDisplayName(Application.Handle, nil, POleStr(Root), Eaten, RootItemIDList, Flags);
with BrowseInfo do
begin
hwndOwner := ParentHWnd;
//pidlRoot := RootItemIDList;
pszDisplayName := Buffer;
lpszTitle := PChar(String_selectdir);
ulFlags := BIF_RETURNONLYFSDIRS;
end;
ItemIDList := ShBrowseForFolder(BrowseInfo);
Result := ItemIDList <> nil;
if Result then
begin
ShGetPathFromIDList(ItemIDList, Buffer);
ShellMalloc.Free(ItemIDList);
Directory := Buffer;
end;
finally
ShellMalloc.Free(Buffer);
end;
end;
end;
constructor TTimerThread.Create;
begin
FreeOnTerminate:=True;
inherited Create(False);
end;
Procedure TTimerThread.ProcessLock;
var i,theIndex:integer;
Ecode:integer;
TempByte:Byte;
TempWord:Word;
TempDword:Dword;
Tempint64:int64;
TempSingle:Single;
TempDouble:Double;
TempString:String[16];
theStatus:boolean;
begin
if (LockNum=0) then exit;
for i:=1 to lockNum do
begin ///for
theindex:=ListToLockIndex[i];
MemLockRecord[theindex].Frozen:=MainForm.Lock_Lv.Items.Item[i-1].Checked;
if MainForm.Lock_Lv.Items.Item[i-1].Checked then
try
begin
with MemLockRecord[theindex] do
begin
case VarType of
Byte_value: begin
val(valueStr,tempByte,Ecode);
theStatus:=WriteMemory(ProcessID,Address,@tempByte,Byte_value,1);
if theStatus then MainForm.Lock_Lv.Items.Item[i-1].SubItems[4]:=String_applying else
MainForm.Lock_Lv.Items.Item[i-1].SubItems[4]:=String_noapplying;
end ;
Word_value: begin
val(valueStr,tempWord,Ecode);
theStatus:=WriteMemory(ProcessID,Address,@tempWord,Word_value,2);
if theStatus then MainForm.Lock_Lv.Items.Item[i-1].SubItems[4]:=String_applying else
MainForm.Lock_Lv.Items.Item[i-1].SubItems[4]:=String_noapplying;
end ;
Dword_value: begin
val(valueStr,tempDWord,Ecode);
theStatus:=WriteMemory(ProcessID,Address,@tempDWord,Dword_value,4);
if theStatus then MainForm.Lock_Lv.Items.Item[i-1].SubItems[4]:=String_applying else
MainForm.Lock_Lv.Items.Item[i-1].SubItems[4]:=String_noapplying;
end ;
Int64_value: begin
val(valueStr,tempInt64,Ecode);
theStatus:=WriteMemory(ProcessID,Address,@tempInt64,Int64_value,8);
if theStatus then MainForm.Lock_Lv.Items.Item[i-1].SubItems[4]:=String_applying else
MainForm.Lock_Lv.Items.Item[i-1].SubItems[4]:=String_noapplying;
end ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -