抽空学习VB,VC++之 VB游戏外挂学习制作(一)
看了一些文章,找了一些书,就开始学吧,至于LINUX内核,当然应该完全分析完毕。 写不出多深的解释,干脆就不解释,我觉得任何一本书或者基础资料都会讲得比较好。 结构理清楚,代码排好,这应该才是最主要的。 今天就来最初步的,我也刚学到一点。慢慢来咯。(声明:其中的代码半抄半加)。 实验一:自动在记事本写一些字。 需要的知识: 1
·
看了一些文章,找了一些书,就开始学吧,至于LINUX内核,当然应该完全分析完毕。
写不出多深的解释,干脆就不解释,我觉得任何一本书或者基础资料都会讲得比较好。
结构理清楚,代码排好,这应该才是最主要的。
今天就来最初步的,我也刚学到一点。慢慢来咯。(声明:其中的代码半抄半加)。
实验一:自动在记事本写一些字。
需要的知识:
1。怎么用VB调用WINDOWS API?
2。找到记事本的句柄
3。找到EDIT控件的句柄
参考工具:
OLLDBG的插件 “窗口工具”,或者SPY++(我的用不了,哭哦~~~)。
步骤:
一, 在开发环境的菜单 工程=》添加模块
在标准模块中添加下面语句,API声明
[code]
'API声明
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
'变量声明
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_CHAR = &H102
Public Const VK_A = &H41
’这个函数来构造postmessage的lparam参数。
Function MakeKeyLparam(ByVal VirtualKey As Long, ByVal flag As Long) As Long
Dim s As String
Dim Firstbyte As String 'lparam参数的24-31位
If flag = WM_KEYDOWN Then '如果是按下键
Firstbyte = "00"
Else
Firstbyte = "C0" '如果是释放键
End If
Dim Scancode As Long
'获得键的扫描码
Scancode = MapVirtualKey(VirtualKey, 0) ‘可查MSDN,或者中文API手册
Dim Secondbyte As String 'lparam参数的16-23位,即虚拟键扫描码
Secondbyte = Right("00" & Hex(Scancode), 2)
s = Firstbyte & Secondbyte & "0001" '0001为lparam参数的0-15位,即发送次数和其它扩展信息
MakeKeyLparam = Val("&H" & s)
End Function
[/code]
在窗体里编写下面代码,通过打印的值我们就可以知道一些我们需要的值。
[code]
Private Sub Command1_Click()
Dim tWnd As Long
tWnd = FindWindow(vbNullString, "key.txt - 记事本")
Print Hex(tWnd)
tWnd = FindWindowEx(tWnd, 0, "Edit", vbNullString)
Print Hex(tWnd)
Dim ret As Long
ret = MakeKeyLparam(VK_A, WM_KEYDOWN)
Print Hex(ret)
PostMessage tWnd, WM_KEYDOWN, VK_A, ret
'PostMessage tWnd, WM_CHAR, Asc("A"), MakeKeyLparam(VK_A, WM_KEYDOWN)
'PostMessage tWnd, WM_KEYDOWN, VK_A, MakeKeyLparam(VK_A, WM_UP)
End Sub
[/code]
好了,我还要继续学习,这个可以实现后台的模拟键盘输入。可惜现在很多游戏用不了了,毕竟我们都知道了,游戏制作者也知道了,我们就要做点他们不知道的咯。
本人小站:www.bestbbs.5d6d.com
高手多多指教。
写不出多深的解释,干脆就不解释,我觉得任何一本书或者基础资料都会讲得比较好。
结构理清楚,代码排好,这应该才是最主要的。
今天就来最初步的,我也刚学到一点。慢慢来咯。(声明:其中的代码半抄半加)。
实验一:自动在记事本写一些字。
需要的知识:
1。怎么用VB调用WINDOWS API?
2。找到记事本的句柄
3。找到EDIT控件的句柄
参考工具:
OLLDBG的插件 “窗口工具”,或者SPY++(我的用不了,哭哦~~~)。
步骤:
一, 在开发环境的菜单 工程=》添加模块
在标准模块中添加下面语句,API声明
[code]
'API声明
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
'变量声明
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_CHAR = &H102
Public Const VK_A = &H41
’这个函数来构造postmessage的lparam参数。
Function MakeKeyLparam(ByVal VirtualKey As Long, ByVal flag As Long) As Long
Dim s As String
Dim Firstbyte As String 'lparam参数的24-31位
If flag = WM_KEYDOWN Then '如果是按下键
Firstbyte = "00"
Else
Firstbyte = "C0" '如果是释放键
End If
Dim Scancode As Long
'获得键的扫描码
Scancode = MapVirtualKey(VirtualKey, 0) ‘可查MSDN,或者中文API手册
Dim Secondbyte As String 'lparam参数的16-23位,即虚拟键扫描码
Secondbyte = Right("00" & Hex(Scancode), 2)
s = Firstbyte & Secondbyte & "0001" '0001为lparam参数的0-15位,即发送次数和其它扩展信息
MakeKeyLparam = Val("&H" & s)
End Function
[/code]
在窗体里编写下面代码,通过打印的值我们就可以知道一些我们需要的值。
[code]
Private Sub Command1_Click()
Dim tWnd As Long
tWnd = FindWindow(vbNullString, "key.txt - 记事本")
Print Hex(tWnd)
tWnd = FindWindowEx(tWnd, 0, "Edit", vbNullString)
Print Hex(tWnd)
Dim ret As Long
ret = MakeKeyLparam(VK_A, WM_KEYDOWN)
Print Hex(ret)
PostMessage tWnd, WM_KEYDOWN, VK_A, ret
'PostMessage tWnd, WM_CHAR, Asc("A"), MakeKeyLparam(VK_A, WM_KEYDOWN)
'PostMessage tWnd, WM_KEYDOWN, VK_A, MakeKeyLparam(VK_A, WM_UP)
End Sub
[/code]
好了,我还要继续学习,这个可以实现后台的模拟键盘输入。可惜现在很多游戏用不了了,毕竟我们都知道了,游戏制作者也知道了,我们就要做点他们不知道的咯。
本人小站:www.bestbbs.5d6d.com
高手多多指教。
更多推荐
已为社区贡献2条内容
所有评论(0)