| 1 | unit formsettingsunit; |
|---|
| 2 | |
|---|
| 3 | interface |
|---|
| 4 | |
|---|
| 5 | uses |
|---|
| 6 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
|---|
| 7 | StdCtrls,registry, Menus,ComCtrls,cefuncproc,ExtCtrls,tlhelp32,CheckLst, |
|---|
| 8 | Buttons, frameHotkeyConfigUnit, |
|---|
| 9 | |
|---|
| 10 | kerneldebugger,plugin,newkernelhandler,debugger,hotkeyhandler, |
|---|
| 11 | formhotkeyunit; |
|---|
| 12 | |
|---|
| 13 | |
|---|
| 14 | type Tpathspecifier=class(TObject) |
|---|
| 15 | public |
|---|
| 16 | path: string; |
|---|
| 17 | end; |
|---|
| 18 | |
|---|
| 19 | type |
|---|
| 20 | TformSettings = class(TForm) |
|---|
| 21 | defaultbuffer: TPopupMenu; |
|---|
| 22 | Default1: TMenuItem; |
|---|
| 23 | pnlConfig: TPanel; |
|---|
| 24 | tvMenuSelection: TTreeView; |
|---|
| 25 | pcSetting: TPageControl; |
|---|
| 26 | GeneralSettings: TTabSheet; |
|---|
| 27 | ScanSettings: TTabSheet; |
|---|
| 28 | Label11: TLabel; |
|---|
| 29 | Label12: TLabel; |
|---|
| 30 | Label13: TLabel; |
|---|
| 31 | Label14: TLabel; |
|---|
| 32 | Label16: TLabel; |
|---|
| 33 | Label17: TLabel; |
|---|
| 34 | Label18: TLabel; |
|---|
| 35 | Label19: TLabel; |
|---|
| 36 | Label23: TLabel; |
|---|
| 37 | Label24: TLabel; |
|---|
| 38 | cbShowUndo: TCheckBox; |
|---|
| 39 | cbShowAdvanced: TCheckBox; |
|---|
| 40 | cbCenterOnPopup: TCheckBox; |
|---|
| 41 | EditUpdateInterval: TEdit; |
|---|
| 42 | EditFreezeInterval: TEdit; |
|---|
| 43 | GroupBox1: TGroupBox; |
|---|
| 44 | cbShowAsSigned: TCheckBox; |
|---|
| 45 | cbBinariesAsDecimal: TCheckBox; |
|---|
| 46 | cbsimplecopypaste: TCheckBox; |
|---|
| 47 | EditNetworkUpdateInterval: TEdit; |
|---|
| 48 | cbUpdatefoundList: TCheckBox; |
|---|
| 49 | editUpdatefoundInterval: TEdit; |
|---|
| 50 | cbHideAllWindows: TCheckBox; |
|---|
| 51 | btnExcludeProcesses: TButton; |
|---|
| 52 | EditAutoAttach: TEdit; |
|---|
| 53 | cbAlwaysAutoAttach: TCheckBox; |
|---|
| 54 | cbSaveWindowPos: TCheckBox; |
|---|
| 55 | cbOldSpeedhack: TCheckBox; |
|---|
| 56 | Label2: TLabel; |
|---|
| 57 | Label3: TLabel; |
|---|
| 58 | Label1: TLabel; |
|---|
| 59 | Label15: TLabel; |
|---|
| 60 | Label21: TLabel; |
|---|
| 61 | checkThread: TCheckBox; |
|---|
| 62 | combothreadpriority: TComboBox; |
|---|
| 63 | cbFastscan: TCheckBox; |
|---|
| 64 | cbSkip_PAGE_NOCACHE: TCheckBox; |
|---|
| 65 | cbLowMemoryUsage: TCheckBox; |
|---|
| 66 | cbMemImage: TCheckBox; |
|---|
| 67 | cbMemMapped: TCheckBox; |
|---|
| 68 | cbMemPrivate: TCheckBox; |
|---|
| 69 | cbEnableHyperscanWhenPossible: TCheckBox; |
|---|
| 70 | EditBufsize: TEdit; |
|---|
| 71 | Plugins: TTabSheet; |
|---|
| 72 | CodeFinder: TTabSheet; |
|---|
| 73 | Assembler: TTabSheet; |
|---|
| 74 | Label4: TLabel; |
|---|
| 75 | Label6: TLabel; |
|---|
| 76 | Label7: TLabel; |
|---|
| 77 | Label8: TLabel; |
|---|
| 78 | Label9: TLabel; |
|---|
| 79 | rbDebugRegisters: TRadioButton; |
|---|
| 80 | rdWriteExceptions: TRadioButton; |
|---|
| 81 | CheckBox1: TCheckBox; |
|---|
| 82 | cbHandleBreakpoints: TCheckBox; |
|---|
| 83 | cbShowDisassembler: TCheckBox; |
|---|
| 84 | cbShowDebugoptions: TCheckBox; |
|---|
| 85 | replacewithnops: TCheckBox; |
|---|
| 86 | askforreplacewithnops: TCheckBox; |
|---|
| 87 | CheckBox2: TCheckBox; |
|---|
| 88 | rbDebugAsBreakpoint: TRadioButton; |
|---|
| 89 | rbInt3AsBreakpoint: TRadioButton; |
|---|
| 90 | cbBreakOnAttach: TCheckBox; |
|---|
| 91 | Extra: TTabSheet; |
|---|
| 92 | TauntOldOsUser: TLabel; |
|---|
| 93 | GroupBox3: TGroupBox; |
|---|
| 94 | cbKernelQueryMemoryRegion: TCheckBox; |
|---|
| 95 | cbKernelReadWriteProcessMemory: TCheckBox; |
|---|
| 96 | cbKernelOpenProcess: TCheckBox; |
|---|
| 97 | cbProcessWatcher: TCheckBox; |
|---|
| 98 | cbKdebug: TCheckBox; |
|---|
| 99 | CheckBox3: TCheckBox; |
|---|
| 100 | CheckBox4: TCheckBox; |
|---|
| 101 | cbGlobalDebug: TCheckBox; |
|---|
| 102 | tsHotkeys: TTabSheet; |
|---|
| 103 | OpenDialog1: TOpenDialog; |
|---|
| 104 | Unrandomizer: TTabSheet; |
|---|
| 105 | Label5: TLabel; |
|---|
| 106 | edtDefault: TEdit; |
|---|
| 107 | cbIncremental: TCheckBox; |
|---|
| 108 | Panel6: TPanel; |
|---|
| 109 | AboutLabel: TLabel; |
|---|
| 110 | Button2: TButton; |
|---|
| 111 | Button1: TButton; |
|---|
| 112 | frameHotkeyConfig: TframeHotkeyConfig; |
|---|
| 113 | cbProcessIcons: TCheckBox; |
|---|
| 114 | cbProcessIconsOnly: TCheckBox; |
|---|
| 115 | tsTools: TTabSheet; |
|---|
| 116 | Panel2: TPanel; |
|---|
| 117 | cbShowTools: TCheckBox; |
|---|
| 118 | Panel3: TPanel; |
|---|
| 119 | edtApplicationTool: TEdit; |
|---|
| 120 | btnSetToolShortcut: TButton; |
|---|
| 121 | Panel5: TPanel; |
|---|
| 122 | Panel4: TPanel; |
|---|
| 123 | btnToolNew: TButton; |
|---|
| 124 | btnToolDelete: TButton; |
|---|
| 125 | lvTools: TListView; |
|---|
| 126 | lblApplicationTool: TLabel; |
|---|
| 127 | lblShortcut: TLabel; |
|---|
| 128 | lblShortcutText: TLabel; |
|---|
| 129 | lblToolsName: TLabel; |
|---|
| 130 | edtToolsName: TEdit; |
|---|
| 131 | OpenButton: TSpeedButton; |
|---|
| 132 | OpenDialog2: TOpenDialog; |
|---|
| 133 | cbShowMainMenu: TCheckBox; |
|---|
| 134 | cbOldPointerAddMethod: TCheckBox; |
|---|
| 135 | Panel7: TPanel; |
|---|
| 136 | Button5: TButton; |
|---|
| 137 | Button4: TButton; |
|---|
| 138 | Panel8: TPanel; |
|---|
| 139 | Label22: TLabel; |
|---|
| 140 | clbPlugins: TCheckListBox; |
|---|
| 141 | procedure Button1Click(Sender: TObject); |
|---|
| 142 | procedure checkThreadClick(Sender: TObject); |
|---|
| 143 | procedure EditBufSizeKeyPress(Sender: TObject; var Key: Char); |
|---|
| 144 | procedure Default1Click(Sender: TObject); |
|---|
| 145 | procedure FormShow(Sender: TObject); |
|---|
| 146 | procedure cbShowDisassemblerClick(Sender: TObject); |
|---|
| 147 | procedure replacewithnopsClick(Sender: TObject); |
|---|
| 148 | procedure CheckBox1Click(Sender: TObject); |
|---|
| 149 | procedure CheckBox2Click(Sender: TObject); |
|---|
| 150 | procedure cbUpdatefoundListClick(Sender: TObject); |
|---|
| 151 | procedure AboutLabelClick(Sender: TObject); |
|---|
| 152 | procedure cbHideAllWindowsClick(Sender: TObject); |
|---|
| 153 | procedure btnExcludeProcessesClick(Sender: TObject); |
|---|
| 154 | procedure FormCreate(Sender: TObject); |
|---|
| 155 | procedure cbKernelQueryMemoryRegionClick(Sender: TObject); |
|---|
| 156 | procedure FormClose(Sender: TObject; var Action: TCloseAction); |
|---|
| 157 | procedure cbKdebugClick(Sender: TObject); |
|---|
| 158 | procedure cbProcessWatcherClick(Sender: TObject); |
|---|
| 159 | procedure Button4Click(Sender: TObject); |
|---|
| 160 | procedure Button5Click(Sender: TObject); |
|---|
| 161 | procedure tvMenuSelectionChange(Sender: TObject; Node: TTreeNode); |
|---|
| 162 | procedure Panel6Resize(Sender: TObject); |
|---|
| 163 | procedure cbProcessIconsClick(Sender: TObject); |
|---|
| 164 | procedure tvMenuSelectionCollapsing(Sender: TObject; Node: TTreeNode; |
|---|
| 165 | var AllowCollapse: Boolean); |
|---|
| 166 | procedure btnSetToolShortcutClick(Sender: TObject); |
|---|
| 167 | procedure cbShowToolsClick(Sender: TObject); |
|---|
| 168 | procedure btnToolNewClick(Sender: TObject); |
|---|
| 169 | procedure lvToolsClick(Sender: TObject); |
|---|
| 170 | procedure edtApplicationToolChange(Sender: TObject); |
|---|
| 171 | procedure btnToolDeleteClick(Sender: TObject); |
|---|
| 172 | procedure edtToolsNameChange(Sender: TObject); |
|---|
| 173 | procedure OpenButtonClick(Sender: TObject); |
|---|
| 174 | private |
|---|
| 175 | |
|---|
| 176 | tempstatePopupHide:word; |
|---|
| 177 | temppopupmodifier:dword; |
|---|
| 178 | tempstatePause:word; |
|---|
| 179 | tempPausemodifier:dword; |
|---|
| 180 | tempstateSpeedhack:word; |
|---|
| 181 | tempSpeedhackmodifier:dword; |
|---|
| 182 | |
|---|
| 183 | systemcallretrieverexecuted:boolean; |
|---|
| 184 | systemcallretrieverhandle: thandle; |
|---|
| 185 | |
|---|
| 186 | tempmodulelist: pchar; |
|---|
| 187 | tempmodulelistsize: integer; |
|---|
| 188 | tempdenylist: boolean; |
|---|
| 189 | tempdenylistglobal: boolean; |
|---|
| 190 | |
|---|
| 191 | deletedmodules: tstringlist; |
|---|
| 192 | |
|---|
| 193 | procedure SetAssociations; |
|---|
| 194 | procedure startsystemcallretrieverifneeded; overload; |
|---|
| 195 | procedure startsystemcallretrieverifneeded(why:string); overload; |
|---|
| 196 | public |
|---|
| 197 | |
|---|
| 198 | |
|---|
| 199 | |
|---|
| 200 | tempdonthidelist: array of string; |
|---|
| 201 | temphideall: boolean; |
|---|
| 202 | laststatePopupHide:word; |
|---|
| 203 | lastpopupmodifier:dword; |
|---|
| 204 | laststatePause:word; |
|---|
| 205 | lastPausemodifier:dword; |
|---|
| 206 | laststateSpeedhack:word; |
|---|
| 207 | lastSpeedhackmodifier:dword; |
|---|
| 208 | Loadingsettingsfromregistry: boolean; |
|---|
| 209 | |
|---|
| 210 | unrandomizersettings: record |
|---|
| 211 | defaultreturn: integer; |
|---|
| 212 | incremental: boolean; |
|---|
| 213 | end; |
|---|
| 214 | end; |
|---|
| 215 | |
|---|
| 216 | var |
|---|
| 217 | formSettings: TformSettings; |
|---|
| 218 | |
|---|
| 219 | |
|---|
| 220 | |
|---|
| 221 | |
|---|
| 222 | IsDebuggerPresentLocation: integer=0; |
|---|
| 223 | |
|---|
| 224 | |
|---|
| 225 | implementation |
|---|
| 226 | |
|---|
| 227 | uses |
|---|
| 228 | aboutunit, |
|---|
| 229 | |
|---|
| 230 | |
|---|
| 231 | Unit2; |
|---|
| 232 | |
|---|
| 233 | MainUnit, |
|---|
| 234 | Mainunit2, |
|---|
| 235 | frmExcludeHideUnit, |
|---|
| 236 | MemoryBrowserFormUnit, |
|---|
| 237 | ModuleSafetyUnit, |
|---|
| 238 | frmProcessWatcherUnit, |
|---|
| 239 | ConfigUnrandomizerFrm; |
|---|
| 240 | |
|---|
| 241 | |
|---|
| 242 | |
|---|
| 243 | |
|---|
| 244 | |
|---|
| 245 | |
|---|
| 246 | procedure decimal(var key: char); |
|---|
| 247 | begin |
|---|
| 248 | case key of |
|---|
| 249 | chr(8) : ; |
|---|
| 250 | chr(16) : ; |
|---|
| 251 | '0'..'9' : ; |
|---|
| 252 | else key:=chr(0); |
|---|
| 253 | end; |
|---|
| 254 | end; |
|---|
| 255 | |
|---|
| 256 | |
|---|
| 257 | procedure TFormSettings.SetAssociations; |
|---|
| 258 | begin |
|---|
| 259 | |
|---|
| 260 | end; |
|---|
| 261 | |
|---|
| 262 | |
|---|
| 263 | procedure TformSettings.Button1Click(Sender: TObject); |
|---|
| 264 | resourcestring |
|---|
| 265 | strProcessWatcherWillPreventUnloader='Enabling the process watcher will prevent the unloader from working'; |
|---|
| 266 | var processhandle2: Thandle; |
|---|
| 267 | reg: TRegistry; |
|---|
| 268 | bufsize: integer; |
|---|
| 269 | newmax: integer; |
|---|
| 270 | i,j,error: integer; |
|---|
| 271 | ec:dword; |
|---|
| 272 | found:boolean; |
|---|
| 273 | |
|---|
| 274 | networkupdateinterval,updateinterval,freezeinterval,FoundInterval: integer; |
|---|
| 275 | |
|---|
| 276 | dllpath: Tpathspecifier; |
|---|
| 277 | begin |
|---|
| 278 | |
|---|
| 279 | if cbProcessWatcher.checked and (frmprocesswatcher=nil) then |
|---|
| 280 | begin |
|---|
| 281 | if messagedlg(strProcessWatcherWillPreventUnloader,mtwarning,[mbok,mbcancel],0)=mrcancel then |
|---|
| 282 | exit |
|---|
| 283 | else |
|---|
| 284 | begin |
|---|
| 285 | loaddbk32; |
|---|
| 286 | frmprocesswatcher:=tfrmprocesswatcher.Create(mainform); //start the process watcher |
|---|
| 287 | end; |
|---|
| 288 | end; |
|---|
| 289 | |
|---|
| 290 | |
|---|
| 291 | if systemcallretrieverexecuted then |
|---|
| 292 | begin |
|---|
| 293 | if GetExitCodeProcess(systemcallretrieverhandle,ec) then |
|---|
| 294 | begin |
|---|
| 295 | if ec=STILL_ACTIVE then |
|---|
| 296 | if messagedlg('It''s best to wait till the systemcall retriever is done. Continue anyhow?',mtconfirmation,[mbyes,mbno],0)=mrno then exit; |
|---|
| 297 | |
|---|
| 298 | closehandle(systemcallretrieverhandle); |
|---|
| 299 | systemcallretrieverexecuted:=false; |
|---|
| 300 | end; |
|---|
| 301 | end; |
|---|
| 302 | |
|---|
| 303 | |
|---|
| 304 | |
|---|
| 305 | if not ((cbMemPrivate.checked) or (cbMemImage.Checked) or (cbMemMapped.Checked)) then |
|---|
| 306 | if messagedlg('You haven''t selected any memory type. This will result in Cheat Engine finding NO memory! Are you stupid?',mtWarning,[mbyes,mbno],0)<>mryes then exit; |
|---|
| 307 | |
|---|
| 308 | |
|---|
| 309 | val(editUpdatefoundInterval.Text,foundinterval,error); |
|---|
| 310 | if (error<>0) or (foundinterval<=0) then raise exception.Create(editUpdatefoundInterval.Text+' is not a valid interval'); |
|---|
| 311 | |
|---|
| 312 | val(editupdateinterval.text,updateinterval,error); |
|---|
| 313 | if (error<>0) or (updateinterval<=0) then raise exception.Create(editupdateinterval.text+' is not a valid interval'); |
|---|
| 314 | |
|---|
| 315 | val(editnetworkupdateinterval.text,networkupdateinterval,error); |
|---|
| 316 | if (error<>0) or (networkupdateinterval<=0) then raise exception.Create(editnetworkupdateinterval.text+' is not a valid interval'); |
|---|
| 317 | |
|---|
| 318 | val(editfreezeinterval.text,freezeinterval,error); |
|---|
| 319 | if (error<>0) or (updateinterval<=0) then raise exception.Create(editfreezeinterval.text+' is not a valid interval'); |
|---|
| 320 | |
|---|
| 321 | |
|---|
| 322 | try bufsize:=StrToInt(editbufsize.text); except bufsize:=1024; end; |
|---|
| 323 | |
|---|
| 324 | if bufsize=0 then raise exception.create('The scanbuffer size has to be greater than 0'); |
|---|
| 325 | |
|---|
| 326 | |
|---|
| 327 | mainform.buffersize:=bufsize*1024; |
|---|
| 328 | |
|---|
| 329 | buffersize:=bufsize*1024; |
|---|
| 330 | |
|---|
| 331 | |
|---|
| 332 | mainform.UndoScan.visible:=falsecbshowundo.checked; |
|---|
| 333 | mainform.advancedbutton.Visible:=cbShowAdvanced.checked; |
|---|
| 334 | |
|---|
| 335 | |
|---|
| 336 | //save to the registry |
|---|
| 337 | reg:=Tregistry.Create; |
|---|
| 338 | try |
|---|
| 339 | Reg.RootKey := HKEY_CURRENT_USER; |
|---|
| 340 | if Reg.OpenKey('\Software\Cheat Engine',true) then |
|---|
| 341 | begin |
|---|
| 342 | //write the settings |
|---|
| 343 | reg.WriteBool('Undo',cbshowundo.checked); |
|---|
| 344 | reg.WriteBool('Advanced',cbShowAdvanced.checked); |
|---|
| 345 | reg.WriteBool('SeperateThread',checkThread.checked); |
|---|
| 346 | reg.WriteInteger('ScanThreadpriority',combothreadpriority.itemindex); |
|---|
| 347 | case combothreadpriority.itemindex of |
|---|
| 348 | 0: scanpriority:=tpIdle; |
|---|
| 349 | 1: scanpriority:=tpLowest; |
|---|
| 350 | 2: scanpriority:=tpLower; |
|---|
| 351 | 3: scanpriority:=tpLower; |
|---|
| 352 | 4: scanpriority:=tpNormal; |
|---|
| 353 | 5: scanpriority:=tpHigher; |
|---|
| 354 | 6: scanpriority:=tpHighest; |
|---|
| 355 | 7: scanpriority:=tpTimeCritical; |
|---|
| 356 | end; |
|---|
| 357 | |
|---|
| 358 | |
|---|
| 359 | reg.WriteInteger('Buffersize',bufsize); |
|---|
| 360 | reg.WriteInteger('Maxresults',newmax); |
|---|
| 361 | reg.WriteBool('UseDebugRegs',rbDebugRegisters.checked); |
|---|
| 362 | reg.writebool('Show Disassembler',cbShowDisassembler.checked); |
|---|
| 363 | reg.WriteBool('Center on popup',cbCenterOnPopup.checked); |
|---|
| 364 | reg.WriteInteger('Update interval',updateinterval); |
|---|
| 365 | reg.WriteInteger('Freeze interval',freezeinterval); |
|---|
| 366 | reg.writebool('Show values as signed',cbShowAsSigned.checked); |
|---|
| 367 | reg.writebool('Handle binarys as decimals',cbBinariesAsDecimal.checked); |
|---|
| 368 | reg.WriteInteger('Network Update Interval',Networkupdateinterval); |
|---|
| 369 | reg.WriteBool('Show debugger options',cbShowDebugOptions.checked); |
|---|
| 370 | reg.WriteBool('Replace incomplete opcodes with NOPS',replacewithnops.checked); |
|---|
| 371 | reg.WriteBool('Ask for replace with NOPS',askforreplacewithnops.checked); |
|---|
| 372 | reg.WriteBool('Use Anti-debugdetection',checkbox1.checked); |
|---|
| 373 | reg.WriteBool('Handle unhandled breakpoints',cbhandlebreakpoints.Checked); |
|---|
| 374 | reg.WriteBool('Fastscan on by default',cbFastscan.checked); |
|---|
| 375 | |
|---|
| 376 | reg.WriteBool('Hardware breakpoints',rbDebugAsBreakpoint.checked); |
|---|
| 377 | reg.WriteBool('Update Foundaddress list',cbUpdatefoundList.checked); |
|---|
| 378 | reg.WriteInteger('Update Foundaddress list Interval',foundinterval); |
|---|
| 379 | |
|---|
| 380 | reg.WriteBool('Simple copy/paste',cbsimplecopypaste.checked); |
|---|
| 381 | reg.WriteString('AutoAttach',EditAutoAttach.text); |
|---|
| 382 | reg.writebool('Always AutoAttach', cbAlwaysAutoAttach.checked); |
|---|
| 383 | |
|---|
| 384 | |
|---|
| 385 | |
|---|
| 386 | mainform.UpdateFoundlisttimer.Interval:=foundinterval; |
|---|
| 387 | |
|---|
| 388 | |
|---|
| 389 | reg.WriteBool('Save window positions',cbSaveWindowPos.checked); |
|---|
| 390 | reg.WriteBool('Use old speedhack',cbOldSpeedhack.checked); |
|---|
| 391 | reg.WriteBool('Show main menu',cbShowMainMenu.Checked); |
|---|
| 392 | reg.WriteBool('Get process icons',cbProcessIcons.Checked); |
|---|
| 393 | GetProcessIcons:=cbProcessIcons.Checked; |
|---|
| 394 | |
|---|
| 395 | reg.WriteBool('Only show processes with icon',cbProcessIconsOnly.Checked); |
|---|
| 396 | ProcessesWithIconsOnly:=cbProcessIconsOnly.Checked; |
|---|
| 397 | |
|---|
| 398 | reg.WriteBool('Pointer appending', cbOldPointerAddMethod.checked); |
|---|
| 399 | |
|---|
| 400 | reg.writebool('skip PAGE_NOCACHE',cbSkip_PAGE_NOCACHE.Checked); |
|---|
| 401 | reg.WriteBool('Break when debuging',cbBreakOnAttach.Checked); |
|---|
| 402 | reg.WriteBool('Hide all windows',cbHideAllWindows.checked); |
|---|
| 403 | reg.WriteBool('Really hide all windows',temphideall); |
|---|
| 404 | |
|---|
| 405 | |
|---|
| 406 | //save donthidelist |
|---|
| 407 | |
|---|
| 408 | setlength(donthidelist,length(tempdonthidelist)); |
|---|
| 409 | for i:=0 to length(tempdonthidelist)-1 do |
|---|
| 410 | begin |
|---|
| 411 | donthidelist[i]:=tempdonthidelist[i]; |
|---|
| 412 | reg.writestring('Do not hide '+IntToStr(i),tempdonthidelist[i]); |
|---|
| 413 | end; |
|---|
| 414 | |
|---|
| 415 | //end |
|---|
| 416 | reg.writestring('Do not hide '+IntToStr(length(tempdonthidelist)),''); |
|---|
| 417 | reg.WriteBool('MEM_PRIVATE',cbMemPrivate.checked); |
|---|
| 418 | reg.WriteBool('MEM_IMAGE',cbMemImage.Checked); |
|---|
| 419 | reg.WriteBool('MEM_MAPPED',cbMemMapped.Checked); |
|---|
| 420 | onlyfront:=not temphideall; |
|---|
| 421 | reg.WriteBool('Low Memory Usage',cbLowMemoryUsage.checked); |
|---|
| 422 | reg.writebool('Use Hyperscan if posible',cbEnableHyperscanWhenPossible.checked); |
|---|
| 423 | |
|---|
| 424 | //check the module list |
|---|
| 425 | if frmModuleSafety<>nil then //modified |
|---|
| 426 | begin |
|---|
| 427 | freemem(modulelist); |
|---|
| 428 | modulelist:=tempmodulelist; |
|---|
| 429 | modulelistsize:=tempmodulelistsize; |
|---|
| 430 | tempmodulelist:=nil; |
|---|
| 431 | denylist:=tempdenylist; |
|---|
| 432 | denylistglobal:=tempdenylistglobal; |
|---|
| 433 | |
|---|
| 434 | reg.WriteBinaryData('Module List',ModuleList^,modulelistsize); |
|---|
| 435 | reg.writeInteger('modulelistsize',modulelistsize); |
|---|
| 436 | reg.WriteBool('Global Denylist',DenyListGlobal); |
|---|
| 437 | reg.WriteBool('ModuleList as Denylist',DenyList); |
|---|
| 438 | end; |
|---|
| 439 | |
|---|
| 440 | try |
|---|
| 441 | reg.WriteInteger('hotkey poll interval',strtoint(frameHotkeyConfig.edtKeypollInterval.text)); |
|---|
| 442 | hotkeyPollInterval:=strtoint(frameHotkeyConfig.edtKeypollInterval.text); |
|---|
| 443 | except |
|---|
| 444 | raise exception.Create('the value for the keypoll interval ('+frameHotkeyConfig.edtKeypollInterval.text+' is invalid'); |
|---|
| 445 | end; |
|---|
| 446 | |
|---|
| 447 | try |
|---|
| 448 | reg.WriteInteger('Time between hotkeypress',strtoint(frameHotkeyConfig.edtHotkeyDelay.text)); |
|---|
| 449 | hotkeyIdletime:=strtoint(frameHotkeyConfig.edtHotkeyDelay.text); |
|---|
| 450 | except |
|---|
| 451 | raise exception.Create('the value for the wait between hotkey presses ('+frameHotkeyConfig.edtHotkeyDelay.text+' is invalid'); |
|---|
| 452 | end; |
|---|
| 453 | |
|---|
| 454 | |
|---|
| 455 | |
|---|
| 456 | |
|---|
| 457 | //save the hotkeylist |
|---|
| 458 | reg.WriteBinaryData('Show Cheat Engine Hotkey',frameHotkeyConfig.newhotkeys[0][0],10); |
|---|
| 459 | reg.WriteBinaryData('Pause process Hotkey',frameHotkeyConfig.newhotkeys[1][0],10); |
|---|
| 460 | reg.WriteBinaryData('Toggle speedhack Hotkey',frameHotkeyConfig.newhotkeys[2][0],10); |
|---|
| 461 | |
|---|
| 462 | |
|---|
| 463 | reg.WriteFloat('Speedhack 1 speed',frameHotkeyConfig.newspeedhackspeed1.speed); |
|---|
| 464 | reg.WriteInteger('Speedhack 1 sleeptime',frameHotkeyConfig.newspeedhackspeed1.sleeptime); |
|---|
| 465 | reg.WriteFloat('Speedhack 2 speed',frameHotkeyConfig.newspeedhackspeed2.speed); |
|---|
| 466 | reg.WriteInteger('Speedhack 2 sleeptime',frameHotkeyConfig.newspeedhackspeed2.sleeptime); |
|---|
| 467 | reg.WriteFloat('Speedhack 3 speed',frameHotkeyConfig.newspeedhackspeed3.speed); |
|---|
| 468 | reg.WriteInteger('Speedhack 3 sleeptime',frameHotkeyConfig.newspeedhackspeed3.sleeptime); |
|---|
| 469 | reg.WriteFloat('Speedhack 4 speed',frameHotkeyConfig.newspeedhackspeed4.speed); |
|---|
| 470 | reg.WriteInteger('Speedhack 4 sleeptime',frameHotkeyConfig.newspeedhackspeed4.sleeptime); |
|---|
| 471 | reg.WriteFloat('Speedhack 5 speed',frameHotkeyConfig.newspeedhackspeed5.speed); |
|---|
| 472 | reg.WriteInteger('Speedhack 5 sleeptime',frameHotkeyConfig.newspeedhackspeed5.sleeptime); |
|---|
| 473 | |
|---|
| 474 | mainunit2.speedhackspeed1:=frameHotkeyConfig.newspeedhackspeed1; |
|---|
| 475 | mainunit2.speedhackspeed2:=frameHotkeyConfig.newspeedhackspeed2; |
|---|
| 476 | mainunit2.speedhackspeed3:=frameHotkeyConfig.newspeedhackspeed3; |
|---|
| 477 | mainunit2.speedhackspeed4:=frameHotkeyConfig.newspeedhackspeed4; |
|---|
| 478 | mainunit2.speedhackspeed5:=frameHotkeyConfig.newspeedhackspeed5; |
|---|
| 479 | |
|---|
| 480 | reg.WriteBinaryData('Set Speedhack speed 1 Hotkey',frameHotkeyConfig.newhotkeys[3][0],10); |
|---|
| 481 | reg.WriteBinaryData('Set Speedhack speed 2 Hotkey',frameHotkeyConfig.newhotkeys[4][0],10); |
|---|
| 482 | reg.WriteBinaryData('Set Speedhack speed 3 Hotkey',frameHotkeyConfig.newhotkeys[5][0],10); |
|---|
| 483 | reg.WriteBinaryData('Set Speedhack speed 4 Hotkey',frameHotkeyConfig.newhotkeys[6][0],10); |
|---|
| 484 | reg.WriteBinaryData('Set Speedhack speed 5 Hotkey',frameHotkeyConfig.newhotkeys[7][0],10); |
|---|
| 485 | |
|---|
| 486 | reg.WriteBinaryData('Increase Speedhack speed',frameHotkeyConfig.newhotkeys[8][0],10); |
|---|
| 487 | reg.WriteFloat('Increase Speedhack delta',frameHotkeyConfig.speedupdelta); |
|---|
| 488 | |
|---|
| 489 | reg.WriteBinaryData('Decrease Speedhack speed',frameHotkeyConfig.newhotkeys[9][0],10); |
|---|
| 490 | reg.WriteFloat('Decrease Speedhack delta',frameHotkeyConfig.slowdowndelta); |
|---|
| 491 | |
|---|
| 492 | mainunit2.speedupdelta:=frameHotkeyConfig.speedupdelta; |
|---|
| 493 | mainunit2.slowdowndelta:=frameHotkeyConfig.slowdowndelta; |
|---|
| 494 | |
|---|
| 495 | reg.WriteBinaryData('Binary Hotkey',frameHotkeyConfig.newhotkeys[10][0],10); |
|---|
| 496 | reg.WriteBinaryData('Byte Hotkey',frameHotkeyConfig.newhotkeys[11][0],10); |
|---|
| 497 | reg.WriteBinaryData('2 Bytes Hotkey',frameHotkeyConfig.newhotkeys[12][0],10); |
|---|
| 498 | reg.WriteBinaryData('4 Bytes Hotkey',frameHotkeyConfig.newhotkeys[13][0],10); |
|---|
| 499 | reg.WriteBinaryData('8 Bytes Hotkey',frameHotkeyConfig.newhotkeys[14][0],10); |
|---|
| 500 | reg.WriteBinaryData('Float Hotkey',frameHotkeyConfig.newhotkeys[15][0],10); |
|---|
| 501 | reg.WriteBinaryData('Double Hotkey',frameHotkeyConfig.newhotkeys[16][0],10); |
|---|
| 502 | reg.WriteBinaryData('Text Hotkey',frameHotkeyConfig.newhotkeys[17][0],10); |
|---|
| 503 | reg.WriteBinaryData('Array of Byte Hotkey',frameHotkeyConfig.newhotkeys[18][0],10); |
|---|
| 504 | reg.WriteBinaryData('New Scan Hotkey',frameHotkeyConfig.newhotkeys[19][0],10); |
|---|
| 505 | reg.WriteBinaryData('New Scan-Exact Value',frameHotkeyConfig.newhotkeys[20][0],10); |
|---|
| 506 | reg.WriteBinaryData('Unknown Initial Value Hotkey',frameHotkeyConfig.newhotkeys[21][0],10); |
|---|
| 507 | reg.WriteBinaryData('Next Scan-Exact Value',frameHotkeyConfig.newhotkeys[22][0],10); |
|---|
| 508 | reg.WriteBinaryData('Increased Value Hotkey',frameHotkeyConfig.newhotkeys[23][0],10); |
|---|
| 509 | reg.WriteBinaryData('Decreased Value Hotkey',frameHotkeyConfig.newhotkeys[24][0],10); |
|---|
| 510 | reg.WriteBinaryData('Changed Value Hotkey',frameHotkeyConfig.newhotkeys[25][0],10); |
|---|
| 511 | reg.WriteBinaryData('Unchanged Value Hotkey',frameHotkeyConfig.newhotkeys[26][0],10); |
|---|
| 512 | reg.WriteBinaryData('Undo Last scan Hotkey',frameHotkeyConfig.newhotkeys[27][0],10); |
|---|
| 513 | reg.WriteBinaryData('Cancel scan Hotkey',frameHotkeyConfig.newhotkeys[28][0],10); |
|---|
| 514 | reg.WriteBinaryData('Debug->Run Hotkey',frameHotkeyConfig.newhotkeys[29][0],10); |
|---|
| 515 | |
|---|
| 516 | |
|---|
| 517 | //apply these hotkey changes |
|---|
| 518 | for i:=0 to 28 do |
|---|
| 519 | begin |
|---|
| 520 | found:=false; |
|---|
| 521 | |
|---|
| 522 | for j:=0 to length(hotkeythread.hotkeylist)-1 do |
|---|
| 523 | begin |
|---|
| 524 | if (hotkeythread.hotkeylist[j].id=i) and (hotkeythread.hotkeylist[j].handler2) then |
|---|
| 525 | begin |
|---|
| 526 | //found it |
|---|
| 527 | hotkeythread.hotkeylist[j].keys:=frameHotkeyConfig.newhotkeys[i]; |
|---|
| 528 | found:=true; |
|---|
| 529 | break; |
|---|
| 530 | end; |
|---|
| 531 | end; |
|---|
| 532 | |
|---|
| 533 | if not found then //add it |
|---|
| 534 | begin |
|---|
| 535 | j:=length(hotkeythread.hotkeylist); |
|---|
| 536 | setlength(hotkeythread.hotkeylist,j+1); |
|---|
| 537 | hotkeythread.hotkeylist[j].keys:=frameHotkeyConfig.newhotkeys[i]; |
|---|
| 538 | hotkeythread.hotkeylist[j].windowtonotify:=mainform.Handle; |
|---|
| 539 | hotkeythread.hotkeylist[j].id:=i; |
|---|
| 540 | hotkeythread.hotkeylist[j].handler2:=true; |
|---|
| 541 | end; |
|---|
| 542 | |
|---|
| 543 | checkkeycombo(frameHotkeyConfig.newhotkeys[i]); |
|---|
| 544 | end; |
|---|
| 545 | |
|---|
| 546 | |
|---|
| 547 | |
|---|
| 548 | |
|---|
| 549 | |
|---|
| 550 | reg.WriteBool('Use dbk32 QueryMemoryRegionEx',cbKernelQueryMemoryRegion.checked); |
|---|
| 551 | reg.WriteBool('Use dbk32 ReadWriteProcessMemory',cbKernelReadWriteProcessMemory.checked); |
|---|
| 552 | reg.WriteBool('Use dbk32 OpenProcess',cbKernelOpenProcess.checked); |
|---|
| 553 | |
|---|
| 554 | reg.WriteBool('Use Processwatcher',cbProcessWatcher.checked); |
|---|
| 555 | reg.WriteBool('Use Kernel Debugger',cbKdebug.checked); |
|---|
| 556 | reg.WriteBool('Use Global Debug Routines',cbGlobalDebug.checked); |
|---|
| 557 | if (cbGlobalDebug.checked) then |
|---|
| 558 | kdebugger.GlobalDebug:=cbGlobalDebug.checked; |
|---|
| 559 | |
|---|
| 560 | |
|---|
| 561 | |
|---|
| 562 | unrandomizersettings.defaultreturn:=strtoint(edtdefault.Text); |
|---|
| 563 | unrandomizersettings.incremental:=cbincremental.Checked; |
|---|
| 564 | reg.WriteInteger('Unrandomizer: default value',unrandomizersettings.defaultreturn); |
|---|
| 565 | reg.WriteBool('Unrandomizer: incremental',unrandomizersettings.incremental); |
|---|
| 566 | |
|---|
| 567 | reg.writebool('Show tools menu', cbShowTools.checked); |
|---|
| 568 | mainform.ools1.Visible:=cbShowTools.checked; |
|---|
| 569 | |
|---|
| 570 | end; |
|---|
| 571 | |
|---|
| 572 | |
|---|
| 573 | //save the tools hotkeys |
|---|
| 574 | reg.DeleteKey('\Software\Cheat Engine\Tools'); |
|---|
| 575 | if Reg.OpenKey('\Software\Cheat Engine\Tools',true) then |
|---|
| 576 | begin |
|---|
| 577 | for i:=0 to lvTools.Items.Count-1 do |
|---|
| 578 | begin |
|---|
| 579 | reg.WriteString(format('%.8x A',[i]),lvTools.Items[i].caption); |
|---|
| 580 | reg.WriteString(format('%.8x B',[i]),lvTools.Items[i].subitems[0]); |
|---|
| 581 | reg.WriteInteger(format('%.8x C',[i]),dword(lvTools.Items[i].data)); |
|---|
| 582 | end; |
|---|
| 583 | end; |
|---|
| 584 | UpdateToolsMenu; |
|---|
| 585 | |
|---|
| 586 | for i:=0 to deletedmodules.Count-1 do |
|---|
| 587 | begin |
|---|
| 588 | j:=pluginhandler.GetPluginID(deletedmodules[i]); |
|---|
| 589 | if j<>-1 then |
|---|
| 590 | pluginhandler.DisablePlugin(j); |
|---|
| 591 | end; |
|---|
| 592 | |
|---|
| 593 | //save the plugins |
|---|
| 594 | reg.DeleteKey('\Software\Cheat Engine\Plugins'); |
|---|
| 595 | if Reg.OpenKey('\Software\Cheat Engine\Plugins',true) then |
|---|
| 596 | begin |
|---|
| 597 | for i:=0 to clbplugins.Count-1 do |
|---|
| 598 | begin |
|---|
| 599 | dllpath:=Tpathspecifier(clbplugins.Items.Objects[i]); |
|---|
| 600 | |
|---|
| 601 | reg.WriteString(format('%.8x A',[i]),dllpath.path); |
|---|
| 602 | reg.WriteBool(format('%.8x B',[i]),clbplugins.Checked[i]); |
|---|
| 603 | end; |
|---|
| 604 | end; |
|---|
| 605 | |
|---|
| 606 | for i:=0 to clbplugins.Count-1 do |
|---|
| 607 | begin |
|---|
| 608 | dllpath:=Tpathspecifier(clbplugins.Items.Objects[i]); |
|---|
| 609 | j:=pluginhandler.GetPluginID(dllpath.path); |
|---|
| 610 | |
|---|
| 611 | if j=-1 then //not loaded yet |
|---|
| 612 | j:=pluginhandler.LoadPlugin(dllpath.path); |
|---|
| 613 | |
|---|
| 614 | if clbplugins.Checked[i] then |
|---|
| 615 | begin |
|---|
| 616 | //at least load it if it is loadable |
|---|
| 617 | |
|---|
| 618 | pluginhandler.EnablePlugin(j); |
|---|
| 619 | end |
|---|
| 620 | else |
|---|
| 621 | pluginhandler.DisablePlugin(j); |
|---|
| 622 | end; |
|---|
| 623 | |
|---|
| 624 | |
|---|
| 625 | |
|---|
| 626 | |
|---|
| 627 | finally |
|---|
| 628 | reg.CloseKey; |
|---|
| 629 | reg.free; |
|---|
| 630 | end; |
|---|
| 631 | |
|---|
| 632 | SetAssociations; |
|---|
| 633 | |
|---|
| 634 | |
|---|
| 635 | |
|---|
| 636 | mainform.FreezeTimer.Interval:=freezeinterval; |
|---|
| 637 | mainform.UpdateTimer.Interval:=updateinterval; |
|---|
| 638 | |
|---|
| 639 | mainform.FreezeTimer.Interval:=freezeinterval; |
|---|
| 640 | mainform.UpdateTimer.Interval:=networkupdateinterval; |
|---|
| 641 | |
|---|
| 642 | |
|---|
| 643 | Skip_PAGE_NOCACHE:=cbSkip_PAGE_NOCACHE.Checked; |
|---|
| 644 | |
|---|
| 645 | |
|---|
| 646 | Scan_MEM_PRIVATE:=cbMemPrivate.checked; |
|---|
| 647 | Scan_MEM_IMAGE:=cbMemImage.Checked; |
|---|
| 648 | Scan_MEM_MAPPED:=cbMemMapped.Checked; |
|---|
| 649 | |
|---|
| 650 | |
|---|
| 651 | laststatePopupHide:=tempstatepopuphide; |
|---|
| 652 | lastpopupmodifier:=temppopupmodifier; |
|---|
| 653 | laststatePause:=tempstatepause; |
|---|
| 654 | lastPausemodifier:=temppausemodifier; |
|---|
| 655 | laststateSpeedhack:=tempstatespeedhack; |
|---|
| 656 | lastSpeedhackmodifier:=tempspeedhackmodifier; |
|---|
| 657 | |
|---|
| 658 | handleautoattachstring; |
|---|
| 659 | |
|---|
| 660 | if cbShowMainMenu.Checked then |
|---|
| 661 | mainform.Menu:=mainform.MainMenu1 |
|---|
| 662 | else |
|---|
| 663 | mainform.Menu:=nil; |
|---|
| 664 | |
|---|
| 665 | modalresult:=mrok; |
|---|
| 666 | end; |
|---|
| 667 | |
|---|
| 668 | procedure TformSettings.checkThreadClick(Sender: TObject); |
|---|
| 669 | begin |
|---|
| 670 | if checkthread.checked then |
|---|
| 671 | begin |
|---|
| 672 | label3.Enabled:=true; |
|---|
| 673 | combothreadpriority.enabled:=true; |
|---|
| 674 | end |
|---|
| 675 | else |
|---|
| 676 | begin |
|---|
| 677 | label3.Enabled:=false; |
|---|
| 678 | combothreadpriority.enabled:=false; |
|---|
| 679 | end; |
|---|
| 680 | end; |
|---|
| 681 | |
|---|
| 682 | procedure TformSettings.EditBufSizeKeyPress(Sender: TObject; |
|---|
| 683 | var Key: Char); |
|---|
| 684 | begin |
|---|
| 685 | decimal(key); |
|---|
| 686 | end; |
|---|
| 687 | |
|---|
| 688 | procedure TformSettings.Default1Click(Sender: TObject); |
|---|
| 689 | begin |
|---|
| 690 | editbufsize.Text:='512'; |
|---|
| 691 | end; |
|---|
| 692 | |
|---|
| 693 | procedure TformSettings.FormShow(Sender: TObject); |
|---|
| 694 | function CheckAssociation(ext: string):boolean; |
|---|
| 695 | var reg: TRegistry; |
|---|
| 696 | temp: string; |
|---|
| 697 | begin |
|---|
| 698 | reg := TRegistry.Create; |
|---|
| 699 | reg.RootKey := HKEY_CLASSES_ROOT; |
|---|
| 700 | reg.LazyWrite := false; |
|---|
| 701 | |
|---|
| 702 | try |
|---|
| 703 | reg.OpenKey(ext+'\shell\open\command',false); |
|---|
| 704 | except |
|---|
| 705 | result:=false; |
|---|
| 706 | reg.free; |
|---|
| 707 | exit; |
|---|
| 708 | end; |
|---|
| 709 | |
|---|
| 710 | temp:=reg.ReadString(''); |
|---|
| 711 | if temp<>application.ExeName+' "%1"' then |
|---|
| 712 | begin |
|---|
| 713 | result:=false; |
|---|
| 714 | reg.CloseKey; |
|---|
| 715 | reg.free; |
|---|
| 716 | exit; |
|---|
| 717 | end; |
|---|
| 718 | |
|---|
| 719 | result:=true; |
|---|
| 720 | end; |
|---|
| 721 | var reg: TRegistry; |
|---|
| 722 | i: integer; |
|---|
| 723 | begin |
|---|
| 724 | tempstatepopuphide:=laststatePopupHide; |
|---|
| 725 | temppopupmodifier:=lastpopupmodifier; |
|---|
| 726 | tempstatepause:=laststatePause; |
|---|
| 727 | temppausemodifier:=lastPausemodifier; |
|---|
| 728 | tempstatespeedhack:=laststateSpeedhack; |
|---|
| 729 | tempspeedhackmodifier:=lastSpeedhackmodifier; |
|---|
| 730 | |
|---|
| 731 | |
|---|
| 732 | setlength(tempdonthidelist,length(donthidelist)); |
|---|
| 733 | for i:=0 to length(donthidelist)-1 do |
|---|
| 734 | tempdonthidelist[i]:=donthidelist[i]; |
|---|
| 735 | |
|---|
| 736 | |
|---|
| 737 | |
|---|
| 738 | if IsDebuggerPresentLocation=0 then |
|---|
| 739 | begin |
|---|
| 740 | checkbox1.Enabled:=false; |
|---|
| 741 | checkbox2.Enabled:=false; |
|---|
| 742 | end; |
|---|
| 743 | |
|---|
| 744 | |
|---|
| 745 | if debuggerthread<>nil then |
|---|
| 746 | begin |
|---|
| 747 | rbDebugAsBreakpoint.Enabled:=false; |
|---|
| 748 | rbInt3AsBreakpoint.Enabled:=false; |
|---|
| 749 | end |
|---|
| 750 | else |
|---|
| 751 | begin |
|---|
| 752 | rbDebugAsBreakpoint.Enabled:=true; |
|---|
| 753 | rbInt3AsBreakpoint.Enabled:=true; |
|---|
| 754 | end; |
|---|
| 755 | |
|---|
| 756 | |
|---|
| 757 | label1.Enabled:=not mainform.nextscanbutton.enabled; |
|---|
| 758 | editbufsize.enabled:=not mainform.nextscanbutton.enabled; |
|---|
| 759 | |
|---|
| 760 | //load the settings from the register and apply them to this window |
|---|
| 761 | |
|---|
| 762 | |
|---|
| 763 | |
|---|
| 764 | if GetSystemType<3 then //not a supported os for hardware breakpoints |
|---|
| 765 | begin |
|---|
| 766 | rdWriteExceptions.Checked:=true; |
|---|
| 767 | rbDebugRegisters.Enabled:=false; |
|---|
| 768 | |
|---|
| 769 | rbDebugAsBreakpoint.enabled:=false; |
|---|
| 770 | rbInt3AsBreakpoint.enabled:=true; |
|---|
| 771 | label6.Enabled:=false; |
|---|
| 772 | label7.Enabled:=false; |
|---|
| 773 | end; |
|---|
| 774 | |
|---|
| 775 | |
|---|
| 776 | cbOldSpeedhack.enabled:=not mainform.cbSpeedhack.Checked; //don't change it while you're using the speedhack |
|---|
| 777 | |
|---|
| 778 | |
|---|
| 779 | |
|---|
| 780 | //fill hotkey list |
|---|
| 781 | for i:=0 to length(hotkeythread.hotkeylist)-1 do |
|---|
| 782 | if hotkeythread.hotkeylist[i].handler2 then |
|---|
| 783 | framehotkeyconfig.newhotkeys[hotkeythread.hotkeylist[i].id]:=hotkeythread.hotkeylist[i].keys; |
|---|
| 784 | |
|---|
| 785 | framehotkeyconfig.newspeedhackspeed1:=speedhackspeed1; |
|---|
| 786 | framehotkeyconfig.newspeedhackspeed2:=speedhackspeed2; |
|---|
| 787 | framehotkeyconfig.newspeedhackspeed3:=speedhackspeed3; |
|---|
| 788 | framehotkeyconfig.newspeedhackspeed4:=speedhackspeed4; |
|---|
| 789 | framehotkeyconfig.newspeedhackspeed5:=speedhackspeed5; |
|---|
| 790 | |
|---|
| 791 | framehotkeyconfig.speedupdelta:=speedupdelta; |
|---|
| 792 | framehotkeyconfig.slowdowndelta:=slowdowndelta; |
|---|
| 793 | |
|---|
| 794 | end; |
|---|
| 795 | |
|---|
| 796 | procedure TformSettings.cbShowDisassemblerClick(Sender: TObject); |
|---|
| 797 | begin |
|---|
| 798 | if cbshowdisassembler.Checked then |
|---|
| 799 | begin |
|---|
| 800 | cbShowDebugOptions.Enabled:=true; |
|---|
| 801 | ReplaceWithNops.enabled:=true; |
|---|
| 802 | |
|---|
| 803 | askforreplacewithnops.Enabled:=replacewithnops.Checked; |
|---|
| 804 | end |
|---|
| 805 | else |
|---|
| 806 | begin |
|---|
| 807 | cbShowDebugOptions.Enabled:=false; |
|---|
| 808 | ReplaceWithNops.enabled:=false; |
|---|
| 809 | askforreplacewithnops.Enabled:=false; |
|---|
| 810 | end; |
|---|
| 811 | end; |
|---|
| 812 | |
|---|
| 813 | procedure TformSettings.replacewithnopsClick(Sender: TObject); |
|---|
| 814 | begin |
|---|
| 815 | askforreplacewithnops.Enabled:=replacewithnops.Checked; |
|---|
| 816 | end; |
|---|
| 817 | |
|---|
| 818 | procedure TformSettings.CheckBox1Click(Sender: TObject); |
|---|
| 819 | begin |
|---|
| 820 | checkbox2.Checked:=checkbox1.checked; |
|---|
| 821 | end; |
|---|
| 822 | |
|---|
| 823 | procedure TformSettings.CheckBox2Click(Sender: TObject); |
|---|
| 824 | begin |
|---|
| 825 | Checkbox1.Checked:=checkbox2.Checked; |
|---|
| 826 | end; |
|---|
| 827 | |
|---|
| 828 | procedure TformSettings.cbUpdatefoundListClick(Sender: TObject); |
|---|
| 829 | begin |
|---|
| 830 | if cbUpdatefoundList.Checked then |
|---|
| 831 | begin |
|---|
| 832 | label18.Enabled:=true; |
|---|
| 833 | editUpdatefoundInterval.Enabled:=true; |
|---|
| 834 | Label19.Enabled:=true; |
|---|
| 835 | end |
|---|
| 836 | else |
|---|
| 837 | begin |
|---|
| 838 | label18.Enabled:=false; |
|---|
| 839 | editUpdatefoundInterval.Enabled:=false; |
|---|
| 840 | Label19.Enabled:=false; |
|---|
| 841 | end; |
|---|
| 842 | end; |
|---|
| 843 | |
|---|
| 844 | procedure TformSettings.AboutLabelClick(Sender: TObject); |
|---|
| 845 | begin |
|---|
| 846 | with tabout.create(self) do |
|---|
| 847 | begin |
|---|
| 848 | showmodal; |
|---|
| 849 | free; |
|---|
| 850 | end; |
|---|
| 851 | |
|---|
| 852 | end; |
|---|
| 853 | |
|---|
| 854 | procedure TformSettings.cbHideAllWindowsClick(Sender: TObject); |
|---|
| 855 | begin |
|---|
| 856 | btnExcludeProcesses.enabled:=cbHideallWindows.Checked; |
|---|
| 857 | end; |
|---|
| 858 | |
|---|
| 859 | procedure TformSettings.btnExcludeProcessesClick(Sender: TObject); |
|---|
| 860 | begin |
|---|
| 861 | |
|---|
| 862 | with tfrmExcludeHide.create(self) do |
|---|
| 863 | begin |
|---|
| 864 | showmodal; |
|---|
| 865 | free; |
|---|
| 866 | end; |
|---|
| 867 | |
|---|
| 868 | end; |
|---|
| 869 | |
|---|
| 870 | procedure TformSettings.FormCreate(Sender: TObject); |
|---|
| 871 | var i: integer; |
|---|
| 872 | unsigned: BOOL; |
|---|
| 873 | begin |
|---|
| 874 | aboutlabel.left:=aboutlabel.parent.ClientWidth-aboutlabel.width; |
|---|
| 875 | aboutlabel.top:=aboutlabel.parent.clientheight-aboutlabel.height; |
|---|
| 876 | |
|---|
| 877 | //set the default popup |
|---|
| 878 | laststatePopupHide:=vk_next; |
|---|
| 879 | lastpopupmodifier:=MOD_CONTROL or MOD_ALT; |
|---|
| 880 | |
|---|
| 881 | laststatepause:=ord('P'); |
|---|
| 882 | lastpausemodifier:=MOD_CONTROL or MOD_ALT; |
|---|
| 883 | |
|---|
| 884 | laststateSpeedhack:=ord('S'); |
|---|
| 885 | laststateSpeedhack:=MOD_CONTROL or MOD_ALT; |
|---|
| 886 | |
|---|
| 887 | deletedmodules:=TStringlist.Create; |
|---|
| 888 | |
|---|
| 889 | |
|---|
| 890 | //64-bit check |
|---|
| 891 | if is64bitos then |
|---|
| 892 | begin |
|---|
| 893 | TauntOldOsUser.Visible:=true; |
|---|
| 894 | TauntOldOsUser.Caption:='Please boot with unsigned drivers allowed(F8 during boot), or sign the driver yourself'; |
|---|
| 895 | |
|---|
| 896 | cbKernelQueryMemoryRegion.enabled:=false; //currently no 64-bit paging support (yet) |
|---|
| 897 | |
|---|
| 898 | cbKdebug.Enabled:=isDBVMCapable; |
|---|
| 899 | cbKdebug.Caption:=cbKdebug.Caption+' (Requires DBVM)'; |
|---|
| 900 | if not cbKdebug.Enabled then |
|---|
| 901 | cbKdebug.checked:=false; |
|---|
| 902 | end; |
|---|
| 903 | |
|---|
| 904 | |
|---|
| 905 | //make the tabs invisible |
|---|
| 906 | for i:=0 to pcSetting.PageCount-1 do |
|---|
| 907 | pcSetting.Pages[i].TabVisible:=false; |
|---|
| 908 | |
|---|
| 909 | pcSetting.ActivePageIndex:=0; |
|---|
| 910 | |
|---|
| 911 | tvMenuSelection.FullExpand; |
|---|
| 912 | end; |
|---|
| 913 | |
|---|
| 914 | procedure TformSettings.cbKernelQueryMemoryRegionClick(Sender: TObject); |
|---|
| 915 | begin |
|---|
| 916 | if (cbkdebug.checked) or (cbKernelQueryMemoryRegion.Checked) or (cbKernelReadWriteProcessMemory.Checked) then |
|---|
| 917 | begin |
|---|
| 918 | cbKernelOpenProcess.Checked:=true; |
|---|
| 919 | cbKernelOpenProcess.Enabled:=false; |
|---|
| 920 | end |
|---|
| 921 | else cbKernelOpenProcess.Enabled:=true; |
|---|
| 922 | |
|---|
| 923 | end; |
|---|
| 924 | |
|---|
| 925 | procedure TformSettings.FormClose(Sender: TObject; |
|---|
| 926 | var Action: TCloseAction); |
|---|
| 927 | begin |
|---|
| 928 | |
|---|
| 929 | deletedmodules.Clear; |
|---|
| 930 | |
|---|
| 931 | end; |
|---|
| 932 | |
|---|
| 933 | procedure TformSettings.startsystemcallretrieverifneeded; |
|---|
| 934 | begin |
|---|
| 935 | startsystemcallretrieverifneeded(''); |
|---|
| 936 | end; |
|---|
| 937 | |
|---|
| 938 | procedure TformSettings.startsystemcallretrieverifneeded(why:string); |
|---|
| 939 | var |
|---|
| 940 | proc_info: TProcessInformation; |
|---|
| 941 | startinfo: TStartupInfo; |
|---|
| 942 | ec: dword; |
|---|
| 943 | begin |
|---|
| 944 | if systemcallretrieverexecuted then |
|---|
| 945 | begin |
|---|
| 946 | //check if it's still running |
|---|
| 947 | if GetExitCodeProcess(systemcallretrieverhandle,ec) then |
|---|
| 948 | if ec=STILL_ACTIVE then exit; //still running |
|---|
| 949 | end; |
|---|
| 950 | |
|---|
| 951 | //start the systemsignalretriever if there's no callnumbers.dat |
|---|
| 952 | if not fileexists(cheatenginedir+'kerneldata.dat') then |
|---|
| 953 | begin |
|---|
| 954 | if why<>'' then |
|---|
| 955 | if messagedlg(why,mtconfirmation,[mbyes,mbno],0)<>mryes then exit; |
|---|
| 956 | |
|---|
| 957 | zeromemory(@proc_info,sizeof(proc_info)); |
|---|
| 958 | zeromemory(@startinfo,sizeof(startinfo)); |
|---|
| 959 | startinfo.cb:=sizeof(startinfo); |
|---|
| 960 | |
|---|
| 961 | if Createprocess(nil,'systemcallretriever.exe',nil,nil,false,NORMAL_PRIORITY_CLASS,nil,nil,startinfo,proc_info) then |
|---|
| 962 | begin |
|---|
| 963 | systemcallretrieverexecuted:=true; |
|---|
| 964 | systemcallretrieverhandle:=proc_info.hProcess; |
|---|
| 965 | end; |
|---|
| 966 | end; |
|---|
| 967 | |
|---|
| 968 | end; |
|---|
| 969 | |
|---|
| 970 | procedure TformSettings.cbKdebugClick(Sender: TObject); |
|---|
| 971 | begin |
|---|
| 972 | if (cbkdebug.checked) or (cbKernelQueryMemoryRegion.Checked) or (cbKernelReadWriteProcessMemory.Checked) then |
|---|
| 973 | begin |
|---|
| 974 | cbKernelOpenProcess.Checked:=true; |
|---|
| 975 | cbKernelOpenProcess.Enabled:=false; |
|---|
| 976 | cbGlobalDebug.enabled:=true; |
|---|
| 977 | end |
|---|
| 978 | else |
|---|
| 979 | begin |
|---|
| 980 | cbKernelOpenProcess.Enabled:=true; |
|---|
| 981 | cbGlobalDebug.enabled:=false; |
|---|
| 982 | end; |
|---|
| 983 | |
|---|
| 984 | if cbkdebug.Checked then |
|---|
| 985 | begin |
|---|
| 986 | cbKernelOpenProcess.enabled:=false; |
|---|
| 987 | cbKernelOpenProcess.Checked:=true; |
|---|
| 988 | cbProcessWatcher.Enabled:=false; |
|---|
| 989 | cbProcesswatcher.Checked:=true; |
|---|
| 990 | |
|---|
| 991 | cbProcessWatcherClick(cbProcessWatcher); |
|---|
| 992 | end else cbprocesswatcher.enableD:=true; |
|---|
| 993 | end; |
|---|
| 994 | |
|---|
| 995 | procedure TformSettings.cbProcessWatcherClick(Sender: TObject); |
|---|
| 996 | var |
|---|
| 997 | proc_info: TProcessInformation; |
|---|
| 998 | startinfo: TStartupInfo; |
|---|
| 999 | begin |
|---|
| 1000 | if cbprocesswatcher.checked then |
|---|
| 1001 | startsystemcallretrieverifneeded('To get more detailed information about processes, like the processname, it''s recommended to run the kerneldataretriever program. Do you want to run it ?'); |
|---|
| 1002 | end; |
|---|
| 1003 | |
|---|
| 1004 | procedure TformSettings.Button4Click(Sender: TObject); |
|---|
| 1005 | var pluginname: string; |
|---|
| 1006 | fullpath: Tpathspecifier; |
|---|
| 1007 | i: integer; |
|---|
| 1008 | s: string; |
|---|
| 1009 | begin |
|---|
| 1010 | |
|---|
| 1011 | if opendialog1.Execute then |
|---|
| 1012 | begin |
|---|
| 1013 | s:=uppercase(ExtractFileName(opendialog1.FileName)); |
|---|
| 1014 | for i:=0 to clbplugins.count-1 do |
|---|
| 1015 | if uppercase(extractfilename(Tpathspecifier(clbplugins.Items.Objects[i]).path))=s then |
|---|
| 1016 | raise exception.Create('This plugin is already loaded'); |
|---|
| 1017 | |
|---|
| 1018 | pluginname:=pluginhandler.GetPluginName(opendialog1.FileName); |
|---|
| 1019 | fullpath:=Tpathspecifier.Create; |
|---|
| 1020 | fullpath.path:=opendialog1.filename; |
|---|
| 1021 | clbPlugins.Items.AddObject(extractfilename(opendialog1.FileName)+':'+pluginname,fullpath); |
|---|
| 1022 | end; |
|---|
| 1023 | |
|---|
| 1024 | end; |
|---|
| 1025 | |
|---|
| 1026 | procedure TformSettings.Button5Click(Sender: TObject); |
|---|
| 1027 | var modulename: string; |
|---|
| 1028 | begin |
|---|
| 1029 | |
|---|
| 1030 | if clbplugins.ItemIndex<>-1 then |
|---|
| 1031 | begin |
|---|
| 1032 | modulename:=extractfilename(Tpathspecifier(clbplugins.items.Objects[clbplugins.ItemIndex]).path); |
|---|
| 1033 | deletedmodules.add(modulename); |
|---|
| 1034 | |
|---|
| 1035 | Tpathspecifier(clbPlugins.Items.Objects[clbplugins.ItemIndex]).Free; |
|---|
| 1036 | clbPlugins.Items.Delete(clbplugins.ItemIndex); |
|---|
| 1037 | end; |
|---|
| 1038 | |
|---|
| 1039 | end; |
|---|
| 1040 | |
|---|
| 1041 | procedure TformSettings.tvMenuSelectionChange(Sender: TObject; |
|---|
| 1042 | Node: TTreeNode); |
|---|
| 1043 | begin |
|---|
| 1044 | if node.Level=0 then //main settings |
|---|
| 1045 | begin |
|---|
| 1046 | pcSetting.ActivePageIndex:=node.Index; |
|---|
| 1047 | end; |
|---|
| 1048 | |
|---|
| 1049 | if node.level=1 then |
|---|
| 1050 | begin |
|---|
| 1051 | if node.Parent.Index=0 then |
|---|
| 1052 | begin |
|---|
| 1053 | if node.Index=0 then //tools menu |
|---|
| 1054 | begin |
|---|
| 1055 | pcSetting.ActivePage:=tsTools; |
|---|
| 1056 | end; |
|---|
| 1057 | end; |
|---|
| 1058 | |
|---|
| 1059 | end; |
|---|
| 1060 | end; |
|---|
| 1061 | |
|---|
| 1062 | procedure TformSettings.Panel6Resize(Sender: TObject); |
|---|
| 1063 | begin |
|---|
| 1064 | button1.Left:=button1.parent.ClientWidth div 2 - button1.Width - 10; |
|---|
| 1065 | button2.Left:=button2.parent.ClientWidth div 2 + 10; |
|---|
| 1066 | end; |
|---|
| 1067 | |
|---|
| 1068 | procedure TformSettings.cbProcessIconsClick(Sender: TObject); |
|---|
| 1069 | begin |
|---|
| 1070 | cbProcessIconsOnly.Enabled:=cbProcessIcons.Checked; |
|---|
| 1071 | if not cbProcessIcons.Checked then cbProcessIconsOnly.Checked:=false; |
|---|
| 1072 | end; |
|---|
| 1073 | |
|---|
| 1074 | procedure TformSettings.tvMenuSelectionCollapsing(Sender: TObject; |
|---|
| 1075 | Node: TTreeNode; var AllowCollapse: Boolean); |
|---|
| 1076 | begin |
|---|
| 1077 | AllowCollapse:=false; |
|---|
| 1078 | end; |
|---|
| 1079 | |
|---|
| 1080 | procedure TformSettings.btnSetToolShortcutClick(Sender: TObject); |
|---|
| 1081 | var x: tshortcut; |
|---|
| 1082 | begin |
|---|
| 1083 | if lvtools.Selected=nil then exit; |
|---|
| 1084 | |
|---|
| 1085 | with TFormHotkey.Create(self) do |
|---|
| 1086 | begin |
|---|
| 1087 | if ShowModal=mrok then |
|---|
| 1088 | begin |
|---|
| 1089 | x:=key; |
|---|
| 1090 | |
|---|
| 1091 | if (modifier and MOD_ALT)>0 then |
|---|
| 1092 | x:=x or scAlt; |
|---|
| 1093 | |
|---|
| 1094 | if (modifier and MOD_CONTROL)>0 then |
|---|
| 1095 | x:=x or scCtrl; |
|---|
| 1096 | |
|---|
| 1097 | if (modifier and MOD_SHIFT)>0 then |
|---|
| 1098 | x:=x or scShift; |
|---|
| 1099 | |
|---|
| 1100 | lblShortcutText.caption:=ShortCutToText(x); |
|---|
| 1101 | lvtools.Selected.Data:=pointer(x); |
|---|
| 1102 | lvtools.Selected.SubItems[1]:=lblShortcutText.caption; |
|---|
| 1103 | end; |
|---|
| 1104 | |
|---|
| 1105 | free; |
|---|
| 1106 | end; |
|---|
| 1107 | end; |
|---|
| 1108 | |
|---|
| 1109 | procedure TformSettings.cbShowToolsClick(Sender: TObject); |
|---|
| 1110 | begin |
|---|
| 1111 | lvTools.enabled:=cbShowTools.Checked; |
|---|
| 1112 | lblToolsName.enabled:=cbShowTools.Checked and (lvtools.Selected<>nil); |
|---|
| 1113 | edtToolsName.enabled:=cbShowTools.Checked and (lvtools.Selected<>nil); |
|---|
| 1114 | lblApplicationTool.enabled:=cbShowTools.Checked and (lvtools.Selected<>nil); |
|---|
| 1115 | edtApplicationTool.enabled:=cbShowTools.Checked and (lvtools.Selected<>nil); |
|---|
| 1116 | OpenButton.Enabled:=cbShowTools.Checked and (lvtools.Selected<>nil); |
|---|
| 1117 | lblShortcut.enabled:= cbShowTools.Checked and (lvtools.Selected<>nil); |
|---|
| 1118 | lblShortcutText.enabled:=cbShowTools.Checked and (lvtools.Selected<>nil); |
|---|
| 1119 | btnSetToolShortcut.enabled:=cbShowTools.Checked and (lvtools.Selected<>nil); |
|---|
| 1120 | btnToolNew.enabled:=cbShowTools.Checked; |
|---|
| 1121 | btnToolDelete.Enabled:=cbShowTools.Checked and (lvtools.Selected<>nil); |
|---|
| 1122 | |
|---|
| 1123 | if (lvtools.Selected<>nil) then |
|---|
| 1124 | begin |
|---|
| 1125 | edtToolsName.Text:=lvtools.Selected.Caption; |
|---|
| 1126 | edtApplicationTool.Text:=lvtools.Selected.SubItems[0]; |
|---|
| 1127 | lblShortcutText.caption:=lvtools.Selected.SubItems[1]; |
|---|
| 1128 | end; |
|---|
| 1129 | |
|---|
| 1130 | end; |
|---|
| 1131 | |
|---|
| 1132 | procedure TformSettings.btnToolNewClick(Sender: TObject); |
|---|
| 1133 | var li:tlistitem; |
|---|
| 1134 | begin |
|---|
| 1135 | li:=lvTools.Items.Add; |
|---|
| 1136 | li.Data:=nil; |
|---|
| 1137 | li.Caption:='No Name'; |
|---|
| 1138 | li.SubItems.Add(''); |
|---|
| 1139 | li.SubItems.Add(''); |
|---|
| 1140 | li.Selected:=true; |
|---|
| 1141 | lvTools.OnClick(lvTools); |
|---|
| 1142 | |
|---|
| 1143 | |
|---|
| 1144 | edtToolsName.SetFocus; |
|---|
| 1145 | edtToolsName.SelectAll; |
|---|
| 1146 | end; |
|---|
| 1147 | |
|---|
| 1148 | procedure TformSettings.lvToolsClick(Sender: TObject); |
|---|
| 1149 | begin |
|---|
| 1150 | lblToolsName.enabled:=lvtools.Selected<>nil; |
|---|
| 1151 | edtToolsName.enabled:=lvtools.Selected<>nil; |
|---|
| 1152 | lblApplicationTool.enabled:=lvtools.Selected<>nil; |
|---|
| 1153 | edtApplicationTool.enabled:=lvtools.Selected<>nil; |
|---|
| 1154 | lblShortcut.enabled:= lvtools.Selected<>nil; |
|---|
| 1155 | lblShortcutText.enabled:=lvtools.Selected<>nil; |
|---|
| 1156 | btnSetToolShortcut.enabled:=lvtools.Selected<>nil; |
|---|
| 1157 | btnToolDelete.Enabled:=lvtools.Selected<>nil; |
|---|
| 1158 | OpenButton.Enabled:=cbShowTools.Checked and (lvtools.Selected<>nil); |
|---|
| 1159 | |
|---|
| 1160 | if lvtools.Selected<>nil then |
|---|
| 1161 | begin |
|---|
| 1162 | edtToolsName.Text:=lvtools.Selected.Caption; |
|---|
| 1163 | edtApplicationTool.Text:=lvtools.Selected.SubItems[0]; |
|---|
| 1164 | lblShortcutText.caption:=lvtools.Selected.SubItems[1]; |
|---|
| 1165 | edtToolsName.SetFocus; |
|---|
| 1166 | end; |
|---|
| 1167 | end; |
|---|
| 1168 | |
|---|
| 1169 | procedure TformSettings.edtApplicationToolChange(Sender: TObject); |
|---|
| 1170 | begin |
|---|
| 1171 | lvtools.Selected.subitems[0]:=edtApplicationTool.text; |
|---|
| 1172 | end; |
|---|
| 1173 | |
|---|
| 1174 | procedure TformSettings.btnToolDeleteClick(Sender: TObject); |
|---|
| 1175 | begin |
|---|
| 1176 | if lvTools.Selected<>nil then |
|---|
| 1177 | lvTools.Selected.Delete; |
|---|
| 1178 | |
|---|
| 1179 | lvTools.OnClick(lvTools); //refresh |
|---|
| 1180 | end; |
|---|
| 1181 | |
|---|
| 1182 | procedure TformSettings.edtToolsNameChange(Sender: TObject); |
|---|
| 1183 | begin |
|---|
| 1184 | lvtools.Selected.Caption:=edtToolsName.text; |
|---|
| 1185 | end; |
|---|
| 1186 | |
|---|
| 1187 | procedure TformSettings.OpenButtonClick(Sender: TObject); |
|---|
| 1188 | begin |
|---|
| 1189 | if opendialog2.Execute then |
|---|
| 1190 | edtApplicationTool.Text:=opendialog2.FileName; |
|---|
| 1191 | end; |
|---|
| 1192 | |
|---|
| 1193 | end. |
|---|
| 1194 | |
|---|