📄 vbwl.htm
字号:
| <A
href="http://bbs.gameres.com/newreply.asp?quote=yes&postid=531857">引用</A> </P></TD></TR></TBODY></TABLE>
<HR color=#7a7138 noShade SIZE=1>
<TABLE style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word"
cellSpacing=1 cellPadding=4 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top><B>Re:
零基础制作【武林外传】辅助工具[详细步骤+图片](VB)</B><BR><BR>1.建立一个新的标准EXE工程,我们就可以开始这次的学习了。
<P></P>
<P>2.我们要建立一个模块,然后添加以下代码:</P>
<P><BR>
<TABLE cellSpacing=1 cellPadding=4 width="80%" align=center>
<TBODY>
<TR>
<TD class=code><PRE><BR><FONT color=#0000d0>Option</FONT> <FONT color=#0000d0>Explicit</FONT><BR><FONT color=#008000>'---------------声明函数-----------------------</FONT><BR><FONT color=#008000>'得到窗体句柄的函数,FindWindow函数用来返回符合指定的类名( ClassName )和窗口名( WindowTitle )的窗口句柄</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Declare</FONT> <FONT color=#0000d0>Function</FONT> <FONT color=#000080>FindWindow</FONT> <FONT color=#0000d0>Lib</FONT> <FONT color=#808080>"user32"</FONT> <FONT color=#0000d0>Alias</FONT> <FONT color=#808080>"FindWindowA"</FONT> (<FONT color=#0000d0>ByVal</FONT> lpClassName <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>String</FONT>, <FONT color=#0000d0>ByVal</FONT> lpWindowName <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>String</FONT>) <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#008000>'得到窗体控件句柄的函数</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Declare</FONT> <FONT color=#0000d0>Function</FONT> <FONT color=#000080>FindWindowEx</FONT> <FONT color=#0000d0>Lib</FONT> <FONT color=#808080>"user32"</FONT> <FONT color=#0000d0>Alias</FONT> <FONT color=#808080>"FindWindowExA"</FONT> (<FONT color=#0000d0>ByVal</FONT> hWnd1 <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByVal</FONT> hWnd2 <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByVal</FONT> lpsz1 <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>String</FONT>, <FONT color=#0000d0>ByVal</FONT> lpsz2 <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>String</FONT>) <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#008000>'得到进程标识符的函数</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Declare</FONT> <FONT color=#0000d0>Function</FONT> <FONT color=#000080>GetWindowThreadProcessId</FONT> <FONT color=#0000d0>Lib</FONT> <FONT color=#808080>"user32"</FONT> (<FONT color=#0000d0>ByVal</FONT> hwnd <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, lpdwProcessId <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>) <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#008000>'得到目标进程句柄的函数</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Declare</FONT> <FONT color=#0000d0>Function</FONT> <FONT color=#000080>OpenProcess</FONT> <FONT color=#0000d0>Lib</FONT> <FONT color=#808080>"kernel32"</FONT> (<FONT color=#0000d0>ByVal</FONT> dwDesiredAccess <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByVal</FONT> bInheritHandle <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByVal</FONT> dwProcessId <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>) <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#008000>'关闭句柄的函数</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Declare</FONT> <FONT color=#0000d0>Function</FONT> <FONT color=#000080>CloseHandle</FONT> <FONT color=#0000d0>Lib</FONT> <FONT color=#808080>"kernel32"</FONT> (<FONT color=#0000d0>ByVal</FONT> hObject <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>) <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#008000>'读取进程内存的函数</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Declare</FONT> <FONT color=#0000d0>Function</FONT> <FONT color=#000080>ReadProcessMemory</FONT> <FONT color=#0000d0>Lib</FONT> <FONT color=#808080>"kernel32.dll"</FONT> (<FONT color=#0000d0>ByVal</FONT> hProcess <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByVal</FONT> lpBaseAddress <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByRef</FONT> lpBuffer <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Any</FONT>, <FONT color=#0000d0>ByVal</FONT> nSize <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByRef</FONT> lpNumberOfBytesWritten <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>) <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#008000>'参数决定了对进程的存储权限,使用完全控制</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Const</FONT> PROCESS_ALL_ACCESS = &H1F0FFF<P></P><P>3.接下来Form中,我们要在程序启动时连接游戏窗口,以下是Form_Load的代码:<BR><FONT color=#0000d0>Dim</FONT> hwd <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT> ‘ 储存 <FONT color=#000080>FindWindow</FONT> 函数返回的句柄<BR><FONT color=#0000d0>Dim</FONT> pid <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#0000d0>Dim</FONT> hProcess <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT> <FONT color=#008000>'存放进程句柄</FONT></P><P><FONT color=#0000d0>Private</FONT> <FONT color=#0000d0>Sub</FONT> Form_Load()<BR>hwd = <FONT color=#000080>FindWindow</FONT>(<FONT color=#808080>"QElementClient Window"</FONT>, <FONT color=#808080>"Element Client"</FONT>)<BR><FONT color=#0000d0>If</FONT> hwd = 0 <FONT color=#0000d0>Then</FONT><BR> <FONT color=#ff0000>MsgBox</FONT> <FONT color=#808080>"未启动游戏"</FONT>, vbOKOnly, <FONT color=#808080>"提示"</FONT><BR> <FONT color=#0000d0>Unload</FONT> Form1<BR><FONT color=#0000d0>End</FONT> <FONT color=#0000d0>If</FONT><BR><FONT color=#000080>GetWindowThreadProcessId</FONT> hwd, pid <FONT color=#008000>'获取进程标识符</FONT><BR><FONT color=#008000>'将进程标识符做为参数,返回目标进程PID的句柄,得到此句柄后</FONT><BR><FONT color=#008000>'即可对目标进行读写操,PROCESS_ALL_ACCESS表示完全控制,权限最大</FONT><BR>hProcess = <FONT color=#000080>OpenProcess</FONT>(PROCESS_ALL_ACCESS, 0, pid)<BR><FONT color=#0000d0>If</FONT> hProcess = 0 <FONT color=#0000d0>Then</FONT><BR> <FONT color=#ff0000>MsgBox</FONT> <FONT color=#808080>"不能打开进程"</FONT>, vbOKOnly, <FONT color=#808080>"提示"</FONT><BR> <FONT color=#0000d0>Unload</FONT> Form1<BR><FONT color=#0000d0>End</FONT> <FONT color=#0000d0>If</FONT><BR><FONT color=#000080>CloseHandle</FONT> hProcess</P><P>4.我们在Form中添加一个Label控件和一个Timer控件,设置Timer的Interval属性为100,Timer1_Timer的代码如下:<BR><FONT color=#0000d0>Dim</FONT> h <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR>hProcess = <FONT color=#000080>OpenProcess</FONT>(PROCESS_ALL_ACCESS, <FONT color=#0000d0>False</FONT>, pid)</P><P><FONT color=#0000d0>If</FONT> hProcess <FONT color=#0000d0>Then</FONT><BR> <FONT color=#000080>ReadProcessMemory</FONT> hProcess, <FONT color=#0000d0>ByVal</FONT> &H8C6A54, h, 4, 0& ‘这三条代码读取获得生命值 <BR> <FONT color=#000080>ReadProcessMemory</FONT> hProcess, <FONT color=#0000d0>ByVal</FONT> h + &H24, h, 4, 0& <BR> <FONT color=#000080>ReadProcessMemory</FONT> hProcess, <FONT color=#0000d0>ByVal</FONT> h + &H254, h, 4, 0&</P><P> <FONT color=#000080>CloseHandle</FONT> hProcess<BR><FONT color=#0000d0>End</FONT> <FONT color=#0000d0>If</FONT></P><P>Label1.Caption = h <FONT color=#008000>'输出生命值</FONT><BR></P></PRE></TD></TR></TBODY></TABLE><BR><BR><BR></P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=right
border=0>
<FORM action=rate.asp method=post target=_blank>
<TBODY>
<TR>
<TD width="70%"><FONT color=#dbc7b0> 注册: <B>2004-10</B>
状态: </FONT><FONT color=#8bbb9e><B><A
href="http://bbs.gameres.com/showposterip.asp?postid=531857"
target=_blank><FONT
color=#888888>Offline</FONT></A></B></FONT></TD>
<TD align=right width="10%"><B><FONT
color=#999999>2</FONT></B> <A
href="http://bbs.gameres.com/showthread.asp?threadid=87316#top">Top</A></TD></TR></FORM></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" cellSpacing=1
cellPadding=4 width="98%" align=center bgColor=#9d9879 border=0>
<TBODY>
<TR bgColor=#f7ebde>
<TD vAlign=top align=middle width="20%"
bgColor=#f7ebde><B>眼镜<BR></B>Exp:522</B><BR><IMG height=64
src="零基础制作【武林外传】辅助工具[详细步骤+图片](VB)!别光看不回贴! - GameRes游戏开发论坛.files/Bomb10.gif"
width=64><BR>下士<BR><IMG
src="零基础制作【武林外传】辅助工具[详细步骤+图片](VB)!别光看不回贴! - GameRes游戏开发论坛.files/5.gif"></TD>
<TD vAlign=top width="80%" bgColor=#f7ebde>
<TABLE id=table2 cellSpacing=0 cellPadding=0 width="100%"
border=0><TBODY>
<TR>
<TD width="35%"><FONT color=#4a4108> 发表于: 2007-7-2
0:58:00</FONT></TD>
<TD>
<P align=right><A
href="http://bbs.gameres.com/gotoblog.asp?ID=眼镜"
target=_blank>博客</A> | <A
href="http://bbs.gameres.com/showuser.asp?userid=14383"
target=_blank>档案</A> | <A href="http://www.163.com/"
target=_blank>主页</A> | <A
href="http://bbs.gameres.com/showmessage.asp?action=sendmessage&username=眼镜"
target=_blank>短信</A> | <A
href="http://bbs.gameres.com/showthread.asp?postid=531861">树状</A>
| <A
href="http://bbs.gameres.com/newfavorite.asp?threadid=87316"
target=_blank>收藏</A> | <A
href="http://bbs.gameres.com/editpost.asp?postid=531861">编辑</A>
| <A
href="http://bbs.gameres.com/delpost.asp?postid=531861">删除</A>
| <A
href="http://bbs.gameres.com/newreply.asp?quote=yes&postid=531861">引用</A> </P></TD></TR></TBODY></TABLE>
<HR color=#7a7138 noShade SIZE=1>
<TABLE style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word"
cellSpacing=1 cellPadding=4 width="100%" border=0>
<TBODY>
<TR>
<TD
vAlign=top><B>Re:零基础制作【武林外传】辅助工具[详细步骤+图片](VB)</B><BR><BR>下面我们来给外挂增加自动保护功能.<BR>1.首先我们要绘制一个界面,最先添加一个Frame控件、最少两个Label控件用于输出生命和真气值、两个Text控件用于输入数据还有两个Timer控件,分别改名为TimerList及TimerAdd,最后添加一个Command控件。可以参考下图,呵呵~我知道你可以画的更好看!<BR><IMG
onmouseover="if(this.title) {this.style.cursor='hand';}"
onclick="if(this.title) {window.open('http://bbs.gameres.com/upload/sf_20077205043.jpg');}"
src="零基础制作【武林外传】辅助工具[详细步骤+图片](VB)!别光看不回贴! - GameRes游戏开发论坛.files/sf_20077205043.jpg"
onload="if(this.width>screen.width-333) {this.width=screen.width-333;this.title='open new window';}"
border=0 ;><BR>2.下一步就是添加代码了,和上次一样新建一个模块,模块内容如下:<BR><BR>
<TABLE cellSpacing=1 cellPadding=4 width="80%" align=center>
<TBODY>
<TR>
<TD class=code><PRE><BR><FONT color=#0000d0>Option</FONT> <FONT color=#0000d0>Explicit</FONT><BR><FONT color=#008000>'---------------声明函数-----------------------</FONT><BR><FONT color=#008000>'得到窗体句柄的函数,FindWindow函数用来返回符合指定的类名( ClassName )和窗口名( WindowTitle )的窗口句柄</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Declare</FONT> <FONT color=#0000d0>Function</FONT> <FONT color=#000080>FindWindow</FONT> <FONT color=#0000d0>Lib</FONT> <FONT color=#808080>"user32"</FONT> <FONT color=#0000d0>Alias</FONT> <FONT color=#808080>"FindWindowA"</FONT> (<FONT color=#0000d0>ByVal</FONT> lpClassName <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>String</FONT>, <FONT color=#0000d0>ByVal</FONT> lpWindowName <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>String</FONT>) <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#008000>'得到窗体控件句柄的函数</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Declare</FONT> <FONT color=#0000d0>Function</FONT> <FONT color=#000080>FindWindowEx</FONT> <FONT color=#0000d0>Lib</FONT> <FONT color=#808080>"user32"</FONT> <FONT color=#0000d0>Alias</FONT> <FONT color=#808080>"FindWindowExA"</FONT> (<FONT color=#0000d0>ByVal</FONT> hWnd1 <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByVal</FONT> hWnd2 <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByVal</FONT> lpsz1 <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>String</FONT>, <FONT color=#0000d0>ByVal</FONT> lpsz2 <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>String</FONT>) <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#008000>'得到进程标识符的函数</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Declare</FONT> <FONT color=#0000d0>Function</FONT> <FONT color=#000080>GetWindowThreadProcessId</FONT> <FONT color=#0000d0>Lib</FONT> <FONT color=#808080>"user32"</FONT> (<FONT color=#0000d0>ByVal</FONT> hwnd <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, lpdwProcessId <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>) <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#008000>'得到目标进程句柄的函数</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Declare</FONT> <FONT color=#0000d0>Function</FONT> <FONT color=#000080>OpenProcess</FONT> <FONT color=#0000d0>Lib</FONT> <FONT color=#808080>"kernel32"</FONT> (<FONT color=#0000d0>ByVal</FONT> dwDesiredAccess <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByVal</FONT> bInheritHandle <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByVal</FONT> dwProcessId <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>) <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#008000>'关闭句柄的函数</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Declare</FONT> <FONT color=#0000d0>Function</FONT> <FONT color=#000080>CloseHandle</FONT> <FONT color=#0000d0>Lib</FONT> <FONT color=#808080>"kernel32"</FONT> (<FONT color=#0000d0>ByVal</FONT> hObject <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>) <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#008000>'读取进程内存的函数</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Declare</FONT> <FONT color=#0000d0>Function</FONT> <FONT color=#000080>ReadProcessMemory</FONT> <FONT color=#0000d0>Lib</FONT> <FONT color=#808080>"kernel32.dll"</FONT> (<FONT color=#0000d0>ByVal</FONT> hProcess <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByVal</FONT> lpBaseAddress <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByRef</FONT> lpBuffer <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Any</FONT>, <FONT color=#0000d0>ByVal</FONT> nSize <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByRef</FONT> lpNumberOfBytesWritten <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>) <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#008000>'参数决定了对进程的存储权限,使用完全控制</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Const</FONT> PROCESS_ALL_ACCESS = &H1F0FFF<BR><FONT color=#008000>'发送信息的函数</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Declare</FONT> <FONT color=#0000d0>Function</FONT> <FONT color=#000080>SendMessage</FONT> <FONT color=#0000d0>Lib</FONT> <FONT color=#808080>"user32"</FONT> <FONT color=#0000d0>Alias</FONT> <FONT color=#808080>"SendMessageA"</FONT> (<FONT color=#0000d0>ByVal</FONT> hwnd <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByVal</FONT> wMsg <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByVal</FONT> wParam <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, lParam <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Any</FONT>) <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Declare</FONT> <FONT color=#0000d0>Function</FONT> <FONT color=#000080>PostMessage</FONT> <FONT color=#0000d0>Lib</FONT> <FONT color=#808080>"user32"</FONT> <FONT color=#0000d0>Alias</FONT> <FONT color=#808080>"PostMessageA"</FONT> (<FONT color=#0000d0>ByVal</FONT> hwnd <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByVal</FONT> wMsg <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByVal</FONT> wParam <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>, <FONT color=#0000d0>ByVal</FONT> lParam <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>) <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#008000>'延迟函数</FONT><BR><FONT color=#0000d0>Public</FONT> <FONT color=#0000d0>Declare</FONT> <FONT color=#0000d0>Sub</FONT> <FONT color=#000080>Sleep</FONT> <FONT color=#0000d0>Lib</FONT> <FONT color=#808080>"kernel32"</FONT> (<FONT color=#0000d0>ByVal</FONT> dwMilliseconds <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT>)<BR>[/code]<P></P><P>发送消息函数和延迟函数是以前内容没有用过的,这回我们将涉及发送模拟键盘消息给窗口,所以加入这两个函数。<BR>3.做好模块,下一步该写Form了。同样还是声明一些变量及Form_Load,代码如下:</P><P>[code]<BR><FONT color=#0000d0>Dim</FONT> hwd <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#0000d0>Dim</FONT> pid <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT><BR><FONT color=#0000d0>Dim</FONT> hProcess <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT> <FONT color=#008000>'存放进程句柄</FONT><BR><FONT color=#0000d0>Dim</FONT> <FONT color=#0000d0>base</FONT> <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT> <FONT color=#008000>'存放人物基地址</FONT><BR><FONT color=#0000d0>Dim</FONT> hp <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT> <FONT color=#008000>'存储生命值</FONT><BR><FONT color=#0000d0>Dim</FONT> hpmax <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT> <FONT color=#008000>'存储生命最大值</FONT><BR><FONT color=#0000d0>Dim</FONT> mp <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT> <FONT color=#008000>'存储真气值</FONT><BR><FONT color=#0000d0>Dim</FONT> mpmax <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT> <FONT color=#008000>'存储真气最大值</FONT></P><P><FONT color=#0000d0>Private</FONT> <FONT color=#0000d0>Sub</FONT> Form_Load()<BR>hwd = <FONT color=#000080>FindWindow</FONT>(<FONT color=#808080>"QElementClient Window"</FONT>, <FONT color=#808080>"Element Client"</FONT>)<BR><FONT color=#0000d0>If</FONT> hwd = 0 <FONT color=#0000d0>Then</FONT><BR> <FONT color=#ff0000>MsgBox</FONT> <FONT color=#808080>"未启动游戏"</FONT>, vbOKOnly, <FONT color=#808080>"提示"</FONT><BR> <FONT color=#0000d0>Unload</FONT> Form1<BR><FONT color=#0000d0>End</FONT> <FONT color=#0000d0>If</FONT><BR><FONT color=#000080>GetWindowThreadProcessId</FONT> hwd, pid <FONT color=#008000>'获取进程标识符</FONT><BR><FONT color=#008000>'将进程标识符做为参数,返回目标进程PID的句柄,得到此句柄后</FONT><BR><FONT color=#008000>'即可对目标进行读写操,PROCESS_ALL_ACCESS表示完全控制,权限最大</FONT><BR>hProcess = <FONT color=#000080>OpenProcess</FONT>(PROCESS_ALL_ACCESS, 0, pid)<BR><FONT color=#0000d0>If</FONT> hProcess = 0 <FONT color=#0000d0>Then</FONT><BR> <FONT color=#ff0000>MsgBox</FONT> <FONT color=#808080>"不能打开进程"</FONT>, vbOKOnly, <FONT color=#808080>"提示"</FONT><BR> <FONT color=#0000d0>Unload</FONT> Form1<BR><FONT color=#0000d0>End</FONT> <FONT color=#0000d0>If</FONT><BR><FONT color=#000080>CloseHandle</FONT> hProcess<BR><FONT color=#0000d0>End</FONT> <FONT color=#0000d0>Sub</FONT><BR>[/code]</P><P>4.下一步,我们通过TimerList显示人物信息,设置TimerList的Interval属性值为1000,其代码如下:<BR>[code]<BR><FONT color=#0000d0>Private</FONT> <FONT color=#0000d0>Sub</FONT> TimerList_Timer() <FONT color=#008000>'显示人物信息时钟</FONT><BR><FONT color=#0000d0>Dim</FONT> <FONT color=#0000d0>name</FONT>(31) <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Byte</FONT> <FONT color=#008000>'存储人物名称</FONT><BR><FONT color=#0000d0>Dim</FONT> name_temp <FONT color=#0000d0>As</FONT> <FONT color=#0000d0>Long</FONT></P><P>hProcess = <FONT color=#000080>OpenProcess</FONT>(PROCESS_ALL_ACCESS, <FONT color=#0000d0>False</FONT>, pid)<BR><FONT color=#0000d0>If</FONT> hProcess <FONT color=#0000d0>Then</FONT><BR> <FONT color=#000080>ReadProcessMemory</FONT> hProcess, <FONT color=#0000d0>ByVal</FONT> &H8C9E54, <FONT color=#0000d0>base</FONT>, 4, 0&<BR> <FONT color=#000080>ReadProcessMemory</FONT> hProcess, <FONT color=#0000d0>ByVal</FONT> <FONT color=#0000d0>base</FONT> + &H24, <FONT color=#0000d0>base</FONT>, 4, 0& <FONT color=#008000>'得到为人物基地址,方便以后使用</FONT><BR> <FONT color=#000080>ReadProcessMemory</FONT> hProcess, <FONT color=#0000d0>ByVal</FONT> <FONT color=#0000d0>base</FONT> + &H254, hp, 4, 0& <FONT color=#008000>'得到生命值</FONT><BR> <FONT color=#000080>ReadProcessMemory</FONT> hProcess, <FONT color=#0000d0>ByVal</FONT> <FONT color=#0000d0>base</FONT> + &H26C, hpmax, 4, 0& <FONT color=#008000>'得到生命最大值</FONT><BR> <FONT color=#000080>ReadProcessMemory</FONT> hProcess, <FONT color=#0000d0>ByVal</FONT> <FONT color=#0000d0>base</FONT> + &H258, mp, 4, 0& <FONT color=#008000>'得到真气值</FONT><BR> <FONT color=#000080>ReadProcessMemory</FONT> hProcess, <FONT color=#0000d0>ByVal</FONT> <FONT color=#0000d0>base</FONT> + &H270, mpmax, 4, 0& <FONT color=#008000>'得到真气最大值</FONT><BR> <FONT color=#000080>ReadProcessMemory</FONT> hProcess, <FONT color=#0000d0>ByVal</FONT> <FONT color=#0000d0>base</FONT> + &H390, name_temp, 4, 0&<BR> <FONT color=#000080>ReadProcessMemory</FONT> hProcess, <FONT color=#0000d0>ByVal</FONT> name_temp, <FONT color=#0000d0>name</FONT>(0), 32, 0& <FONT color=#008000>'得到人物名称</FONT><BR> <FONT color=#000080>CloseHandle</FONT> hProcess<BR><FONT color=#0000d0>End</FONT> <FONT color=#0000d0>If</FONT><BR>Frame1.Caption = <FONT color=#0000d0>name</FONT> <FONT color=#008000>'显示人物名称</FONT><BR>Label2.Caption = <FONT color=#808080>"生命值:"</FONT> & hp & <FONT color=#808080>"/"</FONT> & hpmax <FONT color=#008000>'显示生命值</FONT><BR>Label3.Caption = <FONT color=#808080>"真气值:"</FONT> & mp & <FONT color=#808080>"/"</FONT> & mpmax <FONT color=#008000>'显示真气值</FONT><BR><FONT color=#0000d0>End</FONT> <FONT color=#0000d0>Sub</FONT><BR>[/code]</P><P>现在可以运行一下看看数值是否能正常显示!<BR>5.在来做第二个TimerAdd,设置Enabled = False,Interval属性值为100,期代码如下:<BR>[code]<BR><FONT color=#0000d0>Private</FONT> <FONT color=#0000d0>Sub</FONT> TimerAdd_Timer() <FONT color=#008000>'加血判断时钟</FONT><BR><FONT color=#0000d0>If</FONT> <FONT color=#ff0000>Val</FONT>(Text1.Text) > hp <FONT color=#0000d0>Then</FONT> <FONT color=#008000>'比较当前血量是否比预定值低,是则按下F1健</FONT><BR> <FONT color=#000080>SendMessage</FONT> hwd, &H100, &H70, 0& <FONT color=#008000>'按住F1键,&H100代表按下,&H70代表F1</FONT><BR> <FONT color=#000080>SendMessage</FONT> hwd, &H101, &H70, 0& <FONT color=#008000>'松开F1键,&H101代表松开,&H70代表F1</FONT><BR> <FONT color=#000080>Sleep</FONT> <FONT color=#ff0000>Val</FONT>(Text2.Text) <FONT color=#008000>'延迟text2中的数值,用val()取数值</FONT><BR><FONT color=#0000d0>End</FONT> <FONT color=#0000d0>If</FONT><BR><FONT color=#0000d0>End</FONT> <FONT color=#0000d0>Sub</FONT><BR>[/code]</P><P>6.最后就剩下Command了,设置其Caption属性为“开始”,期代码如下:<BR>[code]<BR><FONT color=#0000d0>Private</FONT> <FONT color=#0000d0>Sub</FONT> Command1_Click()<BR><FONT color=#0000d0>If</FONT> Command1.Caption = <FONT color=#808080>"开始"</FONT> <FONT color=#0000d0>Then</FONT> <FONT color=#008000>'按下标签为“开始”的按钮,激活TimerAdd并改变标签为“停止”</FONT><BR> TimerAdd.Enabled = <FONT color=#0000d0>True</FONT><BR> Command1.Caption = <FONT color=#808080>"停止"</FONT><BR><FONT color=#0000d0>ElseIf</FONT> Command1.Caption = <FONT color=#808080>"停止"</FONT> <FONT color=#0000d0>Then</FONT> <FONT color=#008000>'刚好和上面相反</FONT><BR> TimerAdd.Enabled = <FONT color=#0000d0>False</FONT><BR> Command1.Caption = <FONT color=#808080>"开始"</FONT><BR><FONT color=#0000d0>End</FONT> <FONT color=#0000d0>If</FONT><BR><FONT color=#0000d0>End</FONT> <FONT color=#0000d0>Sub</FONT><BR></P></PRE></TD></TR></TBODY></TABLE><BR>
<P></P>
<P>7.小功告成!运行测试看看,能否实现加血功能!那加蓝、补助技能呢?<BR><IMG
onmouseover="if(this.title) {this.style.cursor='hand';}"
onclick="if(this.title) {window.open('http://bbs.gameres.com/upload/sf_20077205653.jpg');}"
src="零基础制作【武林外传】辅助工具[详细步骤+图片](VB)!别光看不回贴! - GameRes游戏开发论坛.files/sf_20077205653.jpg"
onload="if(this.width>screen.width-333) {this.width=screen.width-333;this.title='open new window';}"
border=0 ;></P>
<P>8.本次内容重点:SendMessage /通过此函数实现模拟键盘操作功能Sleep /必不可少的延迟函数</P>
<P>9.当然,你看完整个文章或者在测试的时候会发现,这个程序还有很多的漏洞或者说还可以做的更完善,没错,这就是接下来你要做的,还是那句话:“因为我知道你可以做的到”</P>
<P>ps:自己设置按键</P>
<P><FONT
color=#000080>SendMessage</FONT> hwd, &H100, Key(Combo1.ListIndex), 0&<BR><FONT
color=#000080>SendMessage</FONT> hwd, &H101, Key(Combo1.ListIndex), 0&</P>
<P><FONT color=#0000d0>Private</FONT> <FONT
color=#0000d0>Function</FONT> Key(Anjian <FONT
color=#0000d0>As</FONT> <FONT
color=#0000d0>Long</FONT>) <FONT
color=#0000d0>As</FONT> <FONT
color=#0000d0>Long</FONT> <FONT
color=#008000>'用于转换按键的函数</FONT><BR><FONT
color=#0000d0>Select</FONT> <FONT
color=#0000d0>Case</FONT> Anjian<BR> <FONT
color=#0000d0>Case</FONT> 0<BR> Key = &H70 ‘F1<BR> <FONT
color=#0000d0>Case</FONT> 1<BR> Key = &H71 <FONT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -