现在的位置: 首页 > 综合 > 正文

抽空学习VB,VC++之 VB游戏外挂学习制作(二)

2013年07月02日 ⁄ 综合 ⁄ 共 1877字 ⁄ 字号 评论关闭
  

实验二:全局模拟键盘

跟上次不同,上次是需要知道具体窗口的句柄,现在不用了,所有窗口都响应的就叫全局咯。

 简单得很,看吧。

(一)

添加模块

编写代码

Declare Sub keybd_event Lib "user32" (ByVal bVk As ByteByVal bScan As ByteByVal dwFlags As LongByVal dwExtraInfo As Long)
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


Public Const VK_A = &H41

然后编写窗体代码


Private Sub Command1_Click()
Dim i As Integer
For i = 0 To 30
keybd_event VK_A, 
000      '按下A键
Sleep 500            '延时500毫秒
Next i
End Sub

对一些DIRECTX游戏,最好还是用
’先获得按键的扫描码
keybd_event VK_A, MapVirtualKey(VK_A, 0), 0, 0   '按下A键

OK,执行就可以体验了,选中一个可以输入的地方。

(二)

第二种方法比较麻烦,虽然功能也差不多

模块代码

Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As GENERALINPUT, ByVal cbSize As LongAs Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 Type GENERALINPUT
   dwType 
As Long
   xi(
0 To 23As Byte
 
End Type

 Type KEYBDINPUT
  wVk 
As Integer
  wScan 
As Integer
  dwFlags 
As Long
  time 
As Long
  dwExtraInfo 
As Long
 
End Type

Const INPUT_KEYBOARD = 1
Public Const VK_A = &H41
Sub MySendKey(bkey As Long)
'参数bkey传入要模拟按键的虚拟码即可模拟按下指定键
Dim GInput(0 To 1As GENERALINPUT
Dim KInput As KEYBDINPUT
 KInput.wVk 
= bkey  '你要模拟的按键
 KInput.dwFlags = 0 '按下键标志
 GInput(0).dwType = INPUT_KEYBOARD
 CopyMemory GInput(
0).xi(0), KInput, Len(KInput) '这个函数用来把内存中KInput的数据复制到GInput
 KInput.wVk = bkey
 KInput.dwFlags 
= KEYEVENTF_KEYUP  ' 释放按键
 GInput(1).dwType = INPUT_KEYBOARD ' 表示该消息为键盘消息
 CopyMemory GInput(1).xi(0), KInput, Len(KInput)
'以上工作把按下键和释放键共2条键盘消息加入到GInput数据结构中
 SendInput 2, GInput(0), Len(GInput(0))    '把GInput中存放的消息插入到消息列队
End Sub

编写窗体代码


Private Sub Command1_Click()
Dim i As Integer
For i = 0 To 30
MySendKey VK_A      
'按下A键
Sleep 500            '延时500毫秒
Next i
End Sub

抱歉!评论已关闭.