//使用物品方式
//内存模拟快捷栏方式
//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 ;
附件列表