看流星社区

 找回密码
 注册账号
查看: 3174|回复: 3

[Delphi] Delphi中常量表达式超出子界范围,求帮忙解决

[复制链接]

该用户从未签到

发表于 2011-3-29 09:03:28 | 显示全部楼层 |阅读模式
unit WriteProcessMem;

interface

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

type
  TForm1 = class(TForm)
    checkbox1: TCheckBox;
    Label1: TLabel;
    Label2: TLabel;
    procedure checkbox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.checkbox1Click(Sender: TObject);
  const                     
      MemAdd:    dword  =  $10006EBC;
      MemData:  dword  =  $E93F911F00;  //错误时停在这里,估计是$E93F911F00这个值太大了,请问怎么解决
      MemAdd1:  dword  =  $10200000;
      MemData1:  dword  =  $B8000000008B4D10E9B56EE0FF90;
      MemAdd2:  dword  =  $10006F02;
      MemData2:  dword  =  $E9F9911F00;
      MemAdd3:  dword  =  $10200100;
      MemData3:  dword  =  $B8000000008B4D10E9FB6DE0FF90;
      MemAdd4:  dword  =  $10006B62;
      MemData4:  dword  =  $E9B1951F00;
      MemAdd5:  dword  =  $10200118;
      MemData5:  dword  =  $B80A0000008B4D10E9436AE0FF90;
      MemAdd6:  dword  =  $10006EBC;
      MemData6:  dword  =  $8B401C8B4D10;
      MemAdd7:  dword  =  $10006F02;
      MemData7:  dword  =  $8B40208B4D10;
      MemAdd8:  dword  =  $10006B62;
      MemData8:  dword  =  $8B40248B4D10;
  var
      hw:  HWND;
      pid:  dword;
      h:  THandle;   
      tt:  Cardinal;   
  begin
      hw  :=  FindWindow(nil, 'Tantra Launcher');
      if  hw  =  0  then
      MessageBox(Handle, PChar('δ·¢ÏÖ´°¿Ú....'), PChar('´íÎó'),MB_ICONERROR or MB_OK);
      GetWindowThreadProcessId(hw,  @pid);
      h  :=  OpenProcess(PROCESS_ALL_ACCESS,  false,  pid);
      if  h  =  0  then
      MessageBox(Handle, PChar('ÎÞ·¨È¡µÃ½ø³Ì¾ä±ú....'), PChar('´íÎó'),MB_ICONERROR or MB_OK);
      if  checkbox1.Checked=true  then  //Èç¹ûÑ¡Ôñ¿ò±»Ñ¡ÔñΪÕæ,Ôò..
      begin
          WriteProcessMemory(h,  Pointer(MemAdd),  @MemData,  sizeof(MemData),  tt);
          WriteProcessMemory(h,  Pointer(MemAdd1),  @MemData1,  sizeof(MemData1),  tt);
          WriteProcessMemory(h,  Pointer(MemAdd2),  @MemData2,  sizeof(MemData2),  tt);
      end;
      if  checkbox1.Checked=False  then
      begin
          WriteProcessMemory(h,  Pointer(MemAdd3),  @MemData3,  sizeof(MemData3),  tt);
          WriteProcessMemory(h,  Pointer(MemAdd4),  @MemData4,  sizeof(MemData4),  tt);
          WriteProcessMemory(h,  Pointer(MemAdd5),  @MemData5,  sizeof(MemData5),  tt);
      end;
      MessageBeep(0);
      CloseHandle(h);   
      close;   

end;

end.


      MemData:  dword  =  $E93F911F00;  //错误时停在这里,估计是$E93F911F00这个值太大了,请问怎么解决啊。。

该用户从未签到

发表于 2011-3-29 09:03:47 | 显示全部楼层
哪里会有这样大的值?分散写入就可以了

该用户从未签到

发表于 2011-3-29 09:04:01 | 显示全部楼层
procedure TForm1.checkbox1Click(Sender: TObject);
  const                     
      MemAdd:    dword  =  $10006EBC;
      MemData:  array[0..4]  of byte= (00,1F,91,F3,E9); //dword  =  $E93F911F00;  //错误时停在这里,估计是$E93F911F00这个值太大了,请问怎么解决
  也许是这个顺序
      MemData:  array[0..4] = (E9, 3F,91 1F,00); //dword  =  $E93F911F00;   

  MemAdd1:  dword  =  $10200000;
      MemData1:  同上//dword  =  $B8000000008B4D10E9B56EE0FF90;
      MemAdd2:  dword  =  $10006F02;
      MemData2:  //同上dword  =  $E9F9911F00;
      MemAdd3:  dword  =  $10200100;
      MemData3:  //同上dword  =  $B8000000008B4D10E9FB6DE0FF90;
      MemAdd4:  dword  =  $10006B62;
      MemData4:  dword  =  $E9B1951F00;
      MemAdd5:  dword  =  $10200118;
      MemData5:  //同上dword  =  $B80A0000008B4D10E9436AE0FF90;
      MemAdd6:  dword  =  $10006EBC;
      MemData6:  //同上dword  =  $8B401C8B4D10;
      MemAdd7:  dword  =  $10006F02;
      MemData7:  //同上dword  =  $8B40208B4D10;
      MemAdd8:  dword  =  $10006B62;
      MemData8:  //同上dword  =  $8B40248B4D10;
  var
      hw:  HWND;
      pid:  dword;
      h:  THandle;   
      tt:  Cardinal;   
  begin
      hw  :=  FindWindow(nil, 'Tantra Launcher');
      if  hw  =  0  then
      MessageBox(Handle, PChar('δ·¢ÏÖ´°¿Ú....'), PChar('´íÎó'),MB_ICONERROR or MB_OK);
      GetWindowThreadProcessId(hw,  @pid);
      h  :=  OpenProcess(PROCESS_ALL_ACCESS,  false,  pid);
      if  h  =  0  then
      MessageBox(Handle, PChar('ÎÞ·¨È¡µÃ½ø³Ì¾ä±ú....'), PChar('´íÎó'),MB_ICONERROR or MB_OK);
      if  checkbox1.Checked=true  then  //Èç¹ûÑ¡Ôñ¿ò±»Ñ¡ÔñΪÕæ,Ôò..
      begin
          WriteProcessMemory(h,  Pointer(MemAdd),  @(MemData[0]),  length(MemData),  tt); //其余的自己改
          WriteProcessMemory(h,  Pointer(MemAdd1),  @MemData1,  sizeof(MemData1),  tt);
          WriteProcessMemory(h,  Pointer(MemAdd2),  @MemData2,  sizeof(MemData2),  tt);
      end;
      if  checkbox1.Checked=False  then
      begin
          WriteProcessMemory(h,  Pointer(MemAdd3),  @MemData3,  sizeof(MemData3),  tt);
          WriteProcessMemory(h,  Pointer(MemAdd4),  @MemData4,  sizeof(MemData4),  tt);
          WriteProcessMemory(h,  Pointer(MemAdd5),  @MemData5,  sizeof(MemData5),  tt);
      end;
      MessageBeep(0);
      CloseHandle(h);   
      close;   


end;


end.

该用户从未签到

 楼主| 发表于 2011-3-29 09:04:15 | 显示全部楼层
谢谢你,我试了一下,是这样的:

MemData:  array[0..4]  of byte= ($E9,$3F,$91,$1F,$00); //dword  =  $E93F911F00;
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-19 04:54

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表