//使用物品方式
//内存模拟快捷栏方式
//SendMessage按键模拟
var
Form1: TForm1;
/////////////////////////////////////////////////////////////
MyHwnd:HWND;
MyPid:Dword;
MyProcess:Thandle;
MyPointer:Integer;
Readbyte:DWORD;//Size_T
HpMin,HpMax:Integer;
MpMin,MpMax:Integer;
hp_half,mp_half:Integer;
RoleName:array [0..16] of WideChar;// UniCode 0..17个字符加起来共18个字符
/////////////////////////////////////////////////////////////
Const
BaseAddress=$924E0C;
Offset1=$1C;
Offset2=$20;
RNOffset1=$5CC;
RNOffset2=$0;
HpMinOffset=$450;
HpMaxOffset=$478;
MpMinOffset=$454;
MpMaxOffset=$47C;
implementation
{$R *.dfm}
function SendKey(Str:string):Integer;
var
MyHwnd:HWND;
KeyValue:integer;
begin
{功能模拟发送按键:1~9,F1~F8}
MyHwnd:=FindWindow(nil,'Element Client');
if Str='1' then KeyValue:=49;
if Str='2' then KeyValue:=50;
if Str='3' then KeyValue:=51;
if Str='4' then KeyValue:=52;
if Str='5' then KeyValue:=53;
if Str='6' then KeyValue:=54;
if Str='7' then KeyValue:=55;
if Str='8' then KeyValue:=56;
if Str='9' then KeyValue:=57;
if Str='F1' then KeyValue:=VK_F1;
if Str='F2' then KeyValue:=VK_F2;
if Str='F3' then KeyValue:=VK_F3;
if Str='F4' then KeyValue:=VK_F4;
if Str='F5' then KeyValue:=VK_F5;
if Str='F6' then KeyValue:=VK_F6;
if Str='F7' then KeyValue:=VK_F7;
if Str='F8' then KeyValue:=VK_F8;
sendmessage(MyHwnd,wm_keydown,KeyValue,0);
sendmessage(MyHwnd,wm_keyup,KeyValue,0);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
MyHwnd:=FindWindow(NIL,'Element Client');
GetWindowThreadProcessId(MyHwnd,@myPid);
MyProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,myPid);
ReadProcessMemory(MyProcess,Pointer(BaseAddress),@MyPointer,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+Offset1),@MyPointer,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+Offset2),@MyPointer,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+HpMinOffset),@HpMin,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+HpMaxOffset),@HpMax,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+MPMinOffset),@MPMin,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+MPMaxOffset),@MPMax,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+RNOffset1),@MyPointer,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+RNOffset2),@RoleName,32,Readbyte);
CloseHandle(MyProcess);
//显示信息
Form1.Label1.Caption:='【'+RoleName+'】 HP:'+intTostr(HpMin)+'/'+intTostr(HpMax)+
' MP:'+intTostr(MPMin)+'/'+intTostr(MPMax);
hp_half:=(HpMax div 2);
mp_half:=(Mpmax div 2);
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if CheckBox1.Checked then
if (HpMin<=StrToInt(Edit1.Text)) then
begin
//使用红
SendKey(ComboBox1.Text);
end;
if CheckBox2.Checked then
if MpMin<=StrToInt(Edit2.Text) then
begin
//使用蓝
SendKey(ComboBox2.Text);
end;
end;
procedure TForm1.Edit1DblClick(Sender: TObject);
begin
Edit1.Text:=IntToStr(hp_half);
Edit2.Text:=IntToStr(mp_half);
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
Edit1.Enabled:=False
else
Edit1.Enabled:=True;
end;
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
if CheckBox2.Checked then
Edit2.Enabled:=False
else
Edit2.Enabled:=True;
end;
Form1: TForm1;
/////////////////////////////////////////////////////////////
MyHwnd:HWND;
MyPid:Dword;
MyProcess:Thandle;
MyPointer:Integer;
Readbyte:DWORD;//Size_T
HpMin,HpMax:Integer;
MpMin,MpMax:Integer;
hp_half,mp_half:Integer;
RoleName:array [0..16] of WideChar;// UniCode 0..17个字符加起来共18个字符
/////////////////////////////////////////////////////////////
Const
BaseAddress=$924E0C;
Offset1=$1C;
Offset2=$20;
RNOffset1=$5CC;
RNOffset2=$0;
HpMinOffset=$450;
HpMaxOffset=$478;
MpMinOffset=$454;
MpMaxOffset=$47C;
implementation
{$R *.dfm}
function SendKey(Str:string):Integer;
var
MyHwnd:HWND;
KeyValue:integer;
begin
{功能模拟发送按键:1~9,F1~F8}
MyHwnd:=FindWindow(nil,'Element Client');
if Str='1' then KeyValue:=49;
if Str='2' then KeyValue:=50;
if Str='3' then KeyValue:=51;
if Str='4' then KeyValue:=52;
if Str='5' then KeyValue:=53;
if Str='6' then KeyValue:=54;
if Str='7' then KeyValue:=55;
if Str='8' then KeyValue:=56;
if Str='9' then KeyValue:=57;
if Str='F1' then KeyValue:=VK_F1;
if Str='F2' then KeyValue:=VK_F2;
if Str='F3' then KeyValue:=VK_F3;
if Str='F4' then KeyValue:=VK_F4;
if Str='F5' then KeyValue:=VK_F5;
if Str='F6' then KeyValue:=VK_F6;
if Str='F7' then KeyValue:=VK_F7;
if Str='F8' then KeyValue:=VK_F8;
sendmessage(MyHwnd,wm_keydown,KeyValue,0);
sendmessage(MyHwnd,wm_keyup,KeyValue,0);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
MyHwnd:=FindWindow(NIL,'Element Client');
GetWindowThreadProcessId(MyHwnd,@myPid);
MyProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,myPid);
ReadProcessMemory(MyProcess,Pointer(BaseAddress),@MyPointer,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+Offset1),@MyPointer,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+Offset2),@MyPointer,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+HpMinOffset),@HpMin,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+HpMaxOffset),@HpMax,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+MPMinOffset),@MPMin,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+MPMaxOffset),@MPMax,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+RNOffset1),@MyPointer,4,Readbyte);
ReadProcessMemory(MyProcess,Pointer(MyPointer+RNOffset2),@RoleName,32,Readbyte);
CloseHandle(MyProcess);
//显示信息
Form1.Label1.Caption:='【'+RoleName+'】 HP:'+intTostr(HpMin)+'/'+intTostr(HpMax)+
' MP:'+intTostr(MPMin)+'/'+intTostr(MPMax);
hp_half:=(HpMax div 2);
mp_half:=(Mpmax div 2);
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if CheckBox1.Checked then
if (HpMin<=StrToInt(Edit1.Text)) then
begin
//使用红
SendKey(ComboBox1.Text);
end;
if CheckBox2.Checked then
if MpMin<=StrToInt(Edit2.Text) then
begin
//使用蓝
SendKey(ComboBox2.Text);
end;
end;
procedure TForm1.Edit1DblClick(Sender: TObject);
begin
Edit1.Text:=IntToStr(hp_half);
Edit2.Text:=IntToStr(mp_half);
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
Edit1.Enabled:=False
else
Edit1.Enabled:=True;
end;
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
if CheckBox2.Checked then
Edit2.Enabled:=False
else
Edit2.Enabled:=True;
end;