⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 formchangedaddresses.pas.svn-base

📁 这是一段游戏修改工具的源代码.ring3功能由dephi开发,驱动是C开发.希望对大家有帮助
💻 SVN-BASE
字号:
unit formChangedAddresses;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,cefuncproc;

type
  TfrmChangedAddresses = class(TForm)
    Changedlist: TListBox;
    OKButton: TButton;
    lblInfo: TLabel;
    procedure OKButtonClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure ChangedlistDblClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmChangedAddresses: TfrmChangedAddresses;

implementation

{$R *.dfm}

uses debugger, MainUnit;

procedure TfrmChangedAddresses.OKButtonClick(Sender: TObject);
var temp: dword;
    i: integer;
begin
  if OKButton.caption='Stop' then
  begin
    if WaitForSingleObject(semaphore,10000)=WAIT_FAILED then
      raise exception.Create('OMG! I can''t stop it!');

    try
      if debuggerthread=nil then exit;

      debuggerthread.Suspend;
      debuggerthread.breakpointset:=false;

      zeromemory(@debuggerthread.DRRegs,sizeof(debuggerthread.DRRegs));
      debuggerthread.DRRegs.ContextFlags:=CONTEXT_DEBUG_REGISTERS;
      debuggerthread.DRRegs.Dr7:=reg0set or reg1set or reg2set or reg3set;

      with debuggerthread do
      for i:=0 to length(threadlist)-1 do
      begin
        suspendthread(threadlist[i,1]);
        setthreadcontext(threadlist[i,1],DRRegs);
        resumethread(threadlist[i,1]);
      end;

      debuggerthread.Resume;

    finally
      releasesemaphore(semaphore,1,nil);
    end;

    okButton.Caption:='Close';
  end else
  modalresult:=mrok;

end;

procedure TfrmChangedAddresses.FormClose(Sender: TObject;
  var Action: TCloseAction);
var temp:dword;
    i: integer;
begin
  action:=caFree;
  if OKButton.caption='Stop' then
  begin
    if WaitForSingleObject(semaphore,10000)=WAIT_FAILED then
      raise exception.Create('OMG! I can''t stop it!');
    debuggerthread.breakpointset:=false;

    zeromemory(@debuggerthread.DRRegs,sizeof(debuggerthread));
    debuggerthread.DRRegs.ContextFlags:=CONTEXT_DEBUG_REGISTERS;
    for i:=0 to length(debuggerthread.threadlist)-1 do
    begin
      suspendthread(debuggerthread.threadlist[i][1]);
      if not SetThreadContext(debuggerthread.threadlist[i][1],debuggerthread.DRRegs) then showmessage('I cant seem to remove the breakpoint from one of the threads!');
      resumethread(debuggerthread.threadlist[i][1]);
    end;
    
    releasesemaphore(semaphore,1,nil);
  end;
end;

procedure TfrmChangedAddresses.FormShow(Sender: TObject);
begin
  OKButton.Caption:='Stop';
end;

procedure TfrmChangedAddresses.ChangedlistDblClick(Sender: TObject);
var i: integer;
    ad: dword;
begin
  ad:=strtoint('$'+changedlist.Items[changedlist.itemindex]);
  with mainform do
  begin
    i:=0;
    while (i<numberofrecords) and
          (
            (memrec[i].Address<>ad) or
            (memrec[i].VarType<>2)
          )  do
          inc(i);
    //find out of this record is in the list
    if i=NumberOfRecords then
    begin
      inc(NumberOfRecords);
      ReserveMem;

      memrec[NumberOfRecords-1].Description:='No Description';
      memrec[NumberOfRecords-1].Address:=ad;
      memrec[NumberOfRecords-1].VarType:=2;

      memrec[NumberOfRecords-1].Frozen:=false;
      memrec[NumberOfRecords-1].FrozenValue:=0;

      memrec[NumberOfRecords-1].Bit:=0;
      hotkeys[NumberOfRecords-1]:=-1;

      updatescreen;
      updatelist;
    end
    else raise Exception.Create(IntToHex(ad,8)+' is already in the list!');


  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -