博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
红蓝保护(按键模拟)
阅读量:5163 次
发布时间:2019-06-13

本文共 3560 字,大约阅读时间需要 11 分钟。

//使用物品方式
201205301103534134.png
201205301103534101.png
 
 
//内存模拟快捷栏方式
201205301103547971.png
 
 
//SendMessage按键模拟
201205301103545430.png
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
;

附件列表

 

转载于:https://www.cnblogs.com/xe2011/archive/2012/05/30/2525956.html

你可能感兴趣的文章
KnockOut循环绑定
查看>>
Windows API封装:LoadLibrary/FreeLibrary
查看>>
web配置详解
查看>>
git+TortoiseGIT+github/码云
查看>>
解决Hibernate保存到数据时中文乱码问题
查看>>
跳转作业
查看>>
Hibernate简单实例
查看>>
ATL ActiveX全屏
查看>>
Linux下安装渗透测试框架Metasploit
查看>>
机器学习常见算法分类汇总
查看>>
Git——开启区分大小写
查看>>
使用jekyll在GitHub Pages上搭建个人博客【转】
查看>>
java之struts2的数据处理
查看>>
java之struts框架入门教程
查看>>
B. An express train to reveries(Round 418)
查看>>
不要逼孩子考100分
查看>>
Python(四)
查看>>
Symbols of String Pattern Matching
查看>>
如何判断一个人的能力
查看>>
【学习笔记】 狄利克雷与莫比乌斯
查看>>