procedure Wait(MSecs: Integer);
var
FirstTickCount, Now: Longint;
begin
FirstTickCount := GetTickCount();
repeat
Application.ProcessMessages;
sleep(1);
Now := GetTickCount();
until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount);
end;procedure bugviewer;
var
ListItem: TListItem;
i:integer;
Gamehwnd:cardinal;
GameHandle:Cardinal;
num:cardinal;
BugName:array[0..32]of wideChar;
//TargetName:array[0..32]of wideChar;
BugBase,BugArrayBase,BugNameBase:dword;//人物基址{(DNF幻影官网 WWW.DNFHUAYING.COM)}
BugArrayCount:cardinal;
TargetID:longint;
TargetHP,TargetMaxHP:cardinal ;
bugx,bugy,Bugjuli:single;
pid:cardinal;
begin
try
Gamehwnd:=findwindow(nil,'Element Client');
GetWindowThreadProcessId(Gamehwnd,@pid); //获取PID;
GameHandle:=openprocess(process_all_access,false,pid); //最高权限打开游戏;
ReadProcessMemory(gamehandle,pointer(base),@BugBase, 4, Num);//一级基址
ReadProcessMemory(gamehandle,pointer(BugBase+$8),@BugBase, 4, Num);//
ReadProcessMemory(gamehandle,pointer(BugBase+$20),@BugBase, 4, Num);//怪物基址
ReadProcessMemory(gamehandle,pointer(BugBase+$24),@BugArrayCount, 4, Num);//怪物数组最大值
ReadProcessMemory(gamehandle,pointer(BugBase+$18),@BugArrayBase, 4, Num);//怪物数组首地址 {=========================怪物列表=======================}
form1.ListView1.Items.Clear;//清空列表
For i:= 0 to BugArrayCount-1 do
begin
ReadProcessMemory(gamehandle, Pointer(BugArrayBase+4*i),@BugBase,4,Num);
if BugBase>0 then
begin
ReadProcessMemory(gamehandle, Pointer(BugBase+$4), @BugBase, 4, Num);
ReadProcessMemory(gamehandle, Pointer(BugBase+$11c), @TargetID, 4, Num);//怪物ID
ReadProcessMemory(gamehandle, Pointer(BugBase+$130), @TargetHP, 4, Num);//怪物HP
ReadProcessMemory(gamehandle, Pointer(BugBase+$148), @TargetMaxHP, 4, Num);//怪物HP上限
ReadProcessMemory(gamehandle, Pointer(BugBase+$3c), @bugx, 4, Num);//怪物X坐标
ReadProcessMemory(gamehandle, Pointer(BugBase+$44), @bugY, 4, Num);//怪物Y坐标
ReadProcessMemory(gamehandle,pointer(BugBase+$208),@BugNameBase, 4, Num); //怪物名称地址
ReadProcessMemory(gamehandle,pointer(BugNameBase),@BugName[0], 32, Num); //怪物名称地址
ReadProcessMemory(gamehandle,pointer(BugBase+$22c),@Bugjuli, 4, Num); //ReadProcessMemory(gamehandle, Pointer(BugBase+$208), @BugName, 4, Num);//怪物名称
//ReadProcessMemory(gamehandle, Pointer(BugName+0), @BugName, 32, Num); //ReadProcessMemory(gamehandle, Pointer(BugBase+$208), @BugName, 4, Num);//怪物名称
//ReadProcessMemory(gamehandle, Pointer(BugName+0), @TargetName, 32, Num);
//tempname:=String(TargetName);
with form1.ListView1 do
begin
ListItem := TListView(form1.ListView1).Items.Add;
ListItem.Caption := ( BugName);
listitem.SubItems.Add(inttostr(targetid));
ListItem.SubItems.Add(inttostr(TargetHP)+'/'+inttostr(TargetMaxHP));
listitem.SubItems.Add(inttostr(trunc(bugx))+','+IntToStr(Trunc(bugY)));
listitem.SubItems.Add(inttostr(trunc(Bugjuli)));
end;
end;
end;
//end;
except
//
end;
CloseHandle(gamehandle);
end;procedure tform1.xuanguai;
var
i:integer;
myarray:Array of longint;
minvalue:longint;
s: string;
zxhwnd:hwnd;
begin
bugviewer;
setlength(myarray,form1.ListView1.Items.Count - 1);
for i := 0 to form1.ListView1.Items.Count - 1 do
begin
myarray[i]:=strtoint(form1.ListView1.Items[i].SubItems[3]);
//stringlist.Add(ListView1.Items[i].SubItems[3]);
end;
minvalue:=minIntValue((myarray));
for i := 0 to form1.ListView1.Items.Count - 1 do
begin
if form1.ListView1.Items[i].SubItems[3]= inttostr(minvalue) then
begin
s := form1.ListView1.Items[i].SubItems[0];
zxhwnd:= findwindow(nil,'Element Client');
if zxhwnd<>0 then postmessage(zxhwnd,sendmsg.wm_idxuanguai,0,strtoint(s));
end;
end;
end;procedure useskill(skillid: Cardinal);
var
zxhwnd:hwnd;
begin
zxhwnd:=findwindow(nil,'Element Client');
if zxhwnd<>0 then postmessage(zxhwnd,sendmsg.WM_JinengGongJi,skillid,0);
end;procedure getskill(var skill:ATSkill);
var
i,skillnum:integer;
Gamehwnd:cardinal;
GameHandle:Cardinal;
myskilladdr,skillFirst:cardinal;
num:cardinal;
baseman:cardinal;
pid:cardinal;
begin
Gamehwnd:=findwindow(nil,'Element Client');
if Gamehwnd<>0 then
Begin
GetWindowThreadProcessId(Gamehwnd,@pid); //获取PID;
GameHandle:=openprocess(process_all_access,false,pid); //最高权限打开游戏;
ReadProcessMemory(gamehandle,pointer(BASE),@BaseMan, 4, Num);//一级基址
ReadProcessMemory(gamehandle,pointer(baseman + $28), @BaseMan, 4, Num);//人物基址
readprocessmemory(gamehandle,pointer(baseman+$910),@skillnum,4,num);
readprocessmemory(gamehandle,pointer(baseman+$90c),@myskilladdr,4,num);
setlength(skill,skillNum);
for i:=0 to skillNum-1 do
begin
ReadProcessMemory(GameHandle,pointer(myskilladdr + i*$4), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $8), @skill[i].id, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $4), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $4), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $63), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst), @skill[i].name[0], 20, Num);
SkillFirst:=0;
end;
closehandle(GameHandle);
end;
end;procedure readmyleveexp;
var
myinifile:Tinifile;
path:pchar;
i:integer;
total:integer;
section:string;
begin
path:=pchar('.\data\level.ini');
section:='level';
myinifile:=Tinifile.Create(path);
total:=myinifile.ReadInteger(section,'total',0);
setlength(leaveArray,total);
for i:=0 to high(leaveArray) do
begin
leaveArray[i]:=myinifile.ReadInteger(section,inttostr(i),0);
end;
myinifile.Free;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
readmyleveexp;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
try
if viewthread<>nil then terminatethread(viewthread.Handle,0);
if autoattack<>nil then terminatethread(autoattack.Handle,0);
if viewerhp<>nil then terminatethread(viewerhp.Handle,0);
finallyend;
//unhook;
end;procedure TForm1.RzBitBtn1Click(Sender: TObject);
var
i:integer;
begin
RzComboBox1.Items.Clear;
RzComboBox2.Items.Clear;
RzComboBox3.Items.Clear;
RzComboBox4.Items.Clear;
RzComboBox5.Items.Clear;
getskill(skills);
for i:=0 to high(skills) do
begin
RzComboBox1.Items.Add(skills[i].name);
RzComboBox2.Items.Add(skills[i].name);
RzComboBox3.items.Add(skills[i].name);
RzComboBox4.items.Add(skills[i].name);
RzComboBox5.items.Add(skills[i].name);
//self.ComboBox_skilladd.Items.Add(skills[i].name);
end;
if high(skills)>0 then
begin
RzComboBox1.ItemIndex:=0;
RzComboBox2.ItemIndex:=0;
RzComboBox3.ItemIndex:=0;
RzComboBox4.ItemIndex:=0;
RzComboBox5.ItemIndex:=0;
end;
end;procedure TForm1.RzBitBtn2Click(Sender: TObject);
var
i:integer;
begin
RzListBox1.Items.Add(RzEdit1.text);
setlength(itemFilter,RzListBox1.Items.Count);
for i:=0 to high(itemFilter) do
begin
itemFilter[i].name:=RzListBox1.Items.Strings[i];
end;
end;procedure TForm1.RzBitBtn3Click(Sender: TObject);
var
i:integer;
begin
for I := 0 to RzListBox1.Count - 1 do
begin
if RzListBox1.Selected[i] then rzlistbox1.Items[i]:=rzedit1.Text;
end;
end;procedure TForm1.RzBitBtn4Click(Sender: TObject);
begin
RzListBox1.DeleteSelectedItems;
end;procedure TForm1.RzBitBtn5Click(Sender: TObject);
var
zxhandle:hwnd;
begin
zxhandle:=findwindow(nil,'Element Client');
sitdown:=false;
//form1.mypostmsg(sendmsg.WM_quxiaodazuo);
sethook(zxhandle);if viewthread<>nil then terminatethread(viewthread.Handle,0);
viewthread:=TviewMemory.Create(false);if autoattack<>nil then terminatethread(autoattack.Handle,0);
autoattack:=Tautoattack.create(false);if viewerhp<>nil then terminatethread(viewerhp.Handle,0);
viewerhp:=Tviewerhp.Create(false);
if pdingdiandaguai<>nil then terminatethread(pdingdiandaguai.Handle,0);
pdingdiandaguai:=Tdingdiandaguai.Create(false);
end;procedure TForm1.RzBitBtn6Click(Sender: TObject);
begin
if viewthread<>nil then terminatethread(viewthread.Handle,0);
if autoattack<>nil then terminatethread(autoattack.Handle,0);
if viewerhp<>nil then terminatethread(viewerhp.Handle,0);
if pdingdiandaguai<>nil then terminatethread(pdingdiandaguai.Handle,0);
end;procedure TForm1.RzBitBtn7Click(Sender: TObject);
begin
RzListBox1.Clear;
end;procedure TForm1.RzCheckBox7Click(Sender: TObject);
begin
RzNumericEdit3.Enabled:= not RzCheckBox7.Checked;
RzNumericEdit4.Enabled:= not RzCheckBox7.Checked;
RzNumericEdit5.Enabled:= not RzCheckBox7.Checked;if RzCheckBox7.Checked then
begin
pdingdiandaguai:=Tdingdiandaguai.Create(false);
end else if pdingdiandaguai<>nil then terminatethread(pdingdiandaguai.Handle,0);end;procedure TForm1.RzListBox1Click(Sender: TObject);
begin
rzedit1.Text:=RzListBox1.SelectedItem;
end;
var
FirstTickCount, Now: Longint;
begin
FirstTickCount := GetTickCount();
repeat
Application.ProcessMessages;
sleep(1);
Now := GetTickCount();
until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount);
end;procedure bugviewer;
var
ListItem: TListItem;
i:integer;
Gamehwnd:cardinal;
GameHandle:Cardinal;
num:cardinal;
BugName:array[0..32]of wideChar;
//TargetName:array[0..32]of wideChar;
BugBase,BugArrayBase,BugNameBase:dword;//人物基址{(DNF幻影官网 WWW.DNFHUAYING.COM)}
BugArrayCount:cardinal;
TargetID:longint;
TargetHP,TargetMaxHP:cardinal ;
bugx,bugy,Bugjuli:single;
pid:cardinal;
begin
try
Gamehwnd:=findwindow(nil,'Element Client');
GetWindowThreadProcessId(Gamehwnd,@pid); //获取PID;
GameHandle:=openprocess(process_all_access,false,pid); //最高权限打开游戏;
ReadProcessMemory(gamehandle,pointer(base),@BugBase, 4, Num);//一级基址
ReadProcessMemory(gamehandle,pointer(BugBase+$8),@BugBase, 4, Num);//
ReadProcessMemory(gamehandle,pointer(BugBase+$20),@BugBase, 4, Num);//怪物基址
ReadProcessMemory(gamehandle,pointer(BugBase+$24),@BugArrayCount, 4, Num);//怪物数组最大值
ReadProcessMemory(gamehandle,pointer(BugBase+$18),@BugArrayBase, 4, Num);//怪物数组首地址 {=========================怪物列表=======================}
form1.ListView1.Items.Clear;//清空列表
For i:= 0 to BugArrayCount-1 do
begin
ReadProcessMemory(gamehandle, Pointer(BugArrayBase+4*i),@BugBase,4,Num);
if BugBase>0 then
begin
ReadProcessMemory(gamehandle, Pointer(BugBase+$4), @BugBase, 4, Num);
ReadProcessMemory(gamehandle, Pointer(BugBase+$11c), @TargetID, 4, Num);//怪物ID
ReadProcessMemory(gamehandle, Pointer(BugBase+$130), @TargetHP, 4, Num);//怪物HP
ReadProcessMemory(gamehandle, Pointer(BugBase+$148), @TargetMaxHP, 4, Num);//怪物HP上限
ReadProcessMemory(gamehandle, Pointer(BugBase+$3c), @bugx, 4, Num);//怪物X坐标
ReadProcessMemory(gamehandle, Pointer(BugBase+$44), @bugY, 4, Num);//怪物Y坐标
ReadProcessMemory(gamehandle,pointer(BugBase+$208),@BugNameBase, 4, Num); //怪物名称地址
ReadProcessMemory(gamehandle,pointer(BugNameBase),@BugName[0], 32, Num); //怪物名称地址
ReadProcessMemory(gamehandle,pointer(BugBase+$22c),@Bugjuli, 4, Num); //ReadProcessMemory(gamehandle, Pointer(BugBase+$208), @BugName, 4, Num);//怪物名称
//ReadProcessMemory(gamehandle, Pointer(BugName+0), @BugName, 32, Num); //ReadProcessMemory(gamehandle, Pointer(BugBase+$208), @BugName, 4, Num);//怪物名称
//ReadProcessMemory(gamehandle, Pointer(BugName+0), @TargetName, 32, Num);
//tempname:=String(TargetName);
with form1.ListView1 do
begin
ListItem := TListView(form1.ListView1).Items.Add;
ListItem.Caption := ( BugName);
listitem.SubItems.Add(inttostr(targetid));
ListItem.SubItems.Add(inttostr(TargetHP)+'/'+inttostr(TargetMaxHP));
listitem.SubItems.Add(inttostr(trunc(bugx))+','+IntToStr(Trunc(bugY)));
listitem.SubItems.Add(inttostr(trunc(Bugjuli)));
end;
end;
end;
//end;
except
//
end;
CloseHandle(gamehandle);
end;procedure tform1.xuanguai;
var
i:integer;
myarray:Array of longint;
minvalue:longint;
s: string;
zxhwnd:hwnd;
begin
bugviewer;
setlength(myarray,form1.ListView1.Items.Count - 1);
for i := 0 to form1.ListView1.Items.Count - 1 do
begin
myarray[i]:=strtoint(form1.ListView1.Items[i].SubItems[3]);
//stringlist.Add(ListView1.Items[i].SubItems[3]);
end;
minvalue:=minIntValue((myarray));
for i := 0 to form1.ListView1.Items.Count - 1 do
begin
if form1.ListView1.Items[i].SubItems[3]= inttostr(minvalue) then
begin
s := form1.ListView1.Items[i].SubItems[0];
zxhwnd:= findwindow(nil,'Element Client');
if zxhwnd<>0 then postmessage(zxhwnd,sendmsg.wm_idxuanguai,0,strtoint(s));
end;
end;
end;procedure useskill(skillid: Cardinal);
var
zxhwnd:hwnd;
begin
zxhwnd:=findwindow(nil,'Element Client');
if zxhwnd<>0 then postmessage(zxhwnd,sendmsg.WM_JinengGongJi,skillid,0);
end;procedure getskill(var skill:ATSkill);
var
i,skillnum:integer;
Gamehwnd:cardinal;
GameHandle:Cardinal;
myskilladdr,skillFirst:cardinal;
num:cardinal;
baseman:cardinal;
pid:cardinal;
begin
Gamehwnd:=findwindow(nil,'Element Client');
if Gamehwnd<>0 then
Begin
GetWindowThreadProcessId(Gamehwnd,@pid); //获取PID;
GameHandle:=openprocess(process_all_access,false,pid); //最高权限打开游戏;
ReadProcessMemory(gamehandle,pointer(BASE),@BaseMan, 4, Num);//一级基址
ReadProcessMemory(gamehandle,pointer(baseman + $28), @BaseMan, 4, Num);//人物基址
readprocessmemory(gamehandle,pointer(baseman+$910),@skillnum,4,num);
readprocessmemory(gamehandle,pointer(baseman+$90c),@myskilladdr,4,num);
setlength(skill,skillNum);
for i:=0 to skillNum-1 do
begin
ReadProcessMemory(GameHandle,pointer(myskilladdr + i*$4), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $8), @skill[i].id, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $4), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $4), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $63), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst), @skill[i].name[0], 20, Num);
SkillFirst:=0;
end;
closehandle(GameHandle);
end;
end;procedure readmyleveexp;
var
myinifile:Tinifile;
path:pchar;
i:integer;
total:integer;
section:string;
begin
path:=pchar('.\data\level.ini');
section:='level';
myinifile:=Tinifile.Create(path);
total:=myinifile.ReadInteger(section,'total',0);
setlength(leaveArray,total);
for i:=0 to high(leaveArray) do
begin
leaveArray[i]:=myinifile.ReadInteger(section,inttostr(i),0);
end;
myinifile.Free;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
readmyleveexp;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
try
if viewthread<>nil then terminatethread(viewthread.Handle,0);
if autoattack<>nil then terminatethread(autoattack.Handle,0);
if viewerhp<>nil then terminatethread(viewerhp.Handle,0);
finallyend;
//unhook;
end;procedure TForm1.RzBitBtn1Click(Sender: TObject);
var
i:integer;
begin
RzComboBox1.Items.Clear;
RzComboBox2.Items.Clear;
RzComboBox3.Items.Clear;
RzComboBox4.Items.Clear;
RzComboBox5.Items.Clear;
getskill(skills);
for i:=0 to high(skills) do
begin
RzComboBox1.Items.Add(skills[i].name);
RzComboBox2.Items.Add(skills[i].name);
RzComboBox3.items.Add(skills[i].name);
RzComboBox4.items.Add(skills[i].name);
RzComboBox5.items.Add(skills[i].name);
//self.ComboBox_skilladd.Items.Add(skills[i].name);
end;
if high(skills)>0 then
begin
RzComboBox1.ItemIndex:=0;
RzComboBox2.ItemIndex:=0;
RzComboBox3.ItemIndex:=0;
RzComboBox4.ItemIndex:=0;
RzComboBox5.ItemIndex:=0;
end;
end;procedure TForm1.RzBitBtn2Click(Sender: TObject);
var
i:integer;
begin
RzListBox1.Items.Add(RzEdit1.text);
setlength(itemFilter,RzListBox1.Items.Count);
for i:=0 to high(itemFilter) do
begin
itemFilter[i].name:=RzListBox1.Items.Strings[i];
end;
end;procedure TForm1.RzBitBtn3Click(Sender: TObject);
var
i:integer;
begin
for I := 0 to RzListBox1.Count - 1 do
begin
if RzListBox1.Selected[i] then rzlistbox1.Items[i]:=rzedit1.Text;
end;
end;procedure TForm1.RzBitBtn4Click(Sender: TObject);
begin
RzListBox1.DeleteSelectedItems;
end;procedure TForm1.RzBitBtn5Click(Sender: TObject);
var
zxhandle:hwnd;
begin
zxhandle:=findwindow(nil,'Element Client');
sitdown:=false;
//form1.mypostmsg(sendmsg.WM_quxiaodazuo);
sethook(zxhandle);if viewthread<>nil then terminatethread(viewthread.Handle,0);
viewthread:=TviewMemory.Create(false);if autoattack<>nil then terminatethread(autoattack.Handle,0);
autoattack:=Tautoattack.create(false);if viewerhp<>nil then terminatethread(viewerhp.Handle,0);
viewerhp:=Tviewerhp.Create(false);
if pdingdiandaguai<>nil then terminatethread(pdingdiandaguai.Handle,0);
pdingdiandaguai:=Tdingdiandaguai.Create(false);
end;procedure TForm1.RzBitBtn6Click(Sender: TObject);
begin
if viewthread<>nil then terminatethread(viewthread.Handle,0);
if autoattack<>nil then terminatethread(autoattack.Handle,0);
if viewerhp<>nil then terminatethread(viewerhp.Handle,0);
if pdingdiandaguai<>nil then terminatethread(pdingdiandaguai.Handle,0);
end;procedure TForm1.RzBitBtn7Click(Sender: TObject);
begin
RzListBox1.Clear;
end;procedure TForm1.RzCheckBox7Click(Sender: TObject);
begin
RzNumericEdit3.Enabled:= not RzCheckBox7.Checked;
RzNumericEdit4.Enabled:= not RzCheckBox7.Checked;
RzNumericEdit5.Enabled:= not RzCheckBox7.Checked;if RzCheckBox7.Checked then
begin
pdingdiandaguai:=Tdingdiandaguai.Create(false);
end else if pdingdiandaguai<>nil then terminatethread(pdingdiandaguai.Handle,0);end;procedure TForm1.RzListBox1Click(Sender: TObject);
begin
rzedit1.Text:=RzListBox1.SelectedItem;
end;
解决方案 »
- DBGridEh定位问题
- InstallShield express for delphi 问题
- 控件前端显示 问题 急!
- 怎样把一个字符串格式为制定长度,不足就补上空格??
- 在Sevice Application程序中,可以正常使用ShellExecute吗?
- 有用delphi做过类似股票分析系统的K线图的请进来?
- 关于TransparentColor和TransparentColorValue两属性应用?
- 请教:怎么在树节点上存储自定义数据,请高手回答
- 怎样正确使用exit,terminate,halt,break这几个函数
- 如何用delphi编写程序建立一个.dbf文件并建立字段,和在一个现有的.dbf文件中添加字段?
- OleContainer与Word的问题
- Delphi动态调用C++编写的DLL问题
给部分的或不能用的
都是宣传用的
外部外部人很难做了现在
还是以前传奇啊
说得轻松想得轻松
什么基址,CALL
都用来糊小孩的
内存修改的人家不认行不行呢
过些时间让你掉线行不行呢
给个图片你认证行不行呢
别说别人没这个技术
还停留在ReadProcessMemory、WriteProcessMemory
封包都行不通了