发个模拟按键喊话的例子

才学习这方面。发个模拟按键喊话的例子。

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Private 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
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Private Const WM_SETFOCUS = &H7
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101
Private Const WM_CHAR = &H102
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const VK_CONTROL = &H11
Private Const VK_SHIFT = &H10
Private Const VK_RETURN = &HD
Private Const VK_1 = &H31
Private Const VK_UP = &H26
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer
'判断函数调用时指定虚拟键的状态
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
'查找与指定文件关联在一起的程序的文件名
Dim HyperJump



Private Sub Command1_Click()
Dim hdl    As Long
Timer1.Enabled = True
Timer1.Interval = Combo1.Text
Command1.Visible = False
Command2.Visible = True
End Sub

Private Sub Command2_Click()
Timer1.Enabled = flase
Command1.Visible = True
Command1.Enabled = False
Timer2.Enabled = True
End Sub

Private Sub Command3_Click()
Shell "explorer.exe http://www.wy178.com"
End Sub

Private Sub Form_Load()
Timer3.Interval = 1 '定义热键相关
Timer2.Interval = 500
Timer2.Enabled = False
'SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE '窗口置顶
Timer1.Enabled = flase
Timer1.Interval = 3000
Command1.Caption = "开始喊话"
Command2.Caption = "停止喊话"
Text1.Text = "进游戏,按Home键开始喊话,按End键停止!"
Form1.Caption = "热血传奇喊话工具 v1.0"  '程序标题
End Sub

Private Sub Timer1_Timer()
Dim str As String, data() As Byte, i As Integer
Dim Mir2Hwnd As Long, hwnd As Long
Mir2Hwnd = FindWindow("TFrmMain", "legend of mir2")
hwnd = FindWindowEx(Mir2Hwnd, 0, "TDXDraw", vbNullString)
PostMessage hwnd, WM_SETFOCUS, 0, 0 '获得窗口焦点
PostMessage hwnd, WM_KEYDOWN, 0, 0 '发送回车键
'PostMessage hwnd, WM_KEYDOWN, VK_UP, MapVirtualKey(VK_UP, WM_KEYDOWN) '发送向上键
'PostMessage hwnd, WM_KEYDOWN, VK_RETURN, MapVirtualKey(VK_RETURN, WM_KEYDOWN) '发送回车键
str = Text1.Text 'Str为喊话内容
i = 0
data = StrConv(str, vbFromUnicode)
While i <= UBound(data)
If data(i) < 128 Then
PostMessage hwnd, WM_CHAR, data(i), 0&
PostMessage hwnd, WM_SETFOCUS, 0, 0 '获得窗口焦点
PostMessage hwnd, WM_KEYDOWN, VK_RETURN, MapVirtualKey(VK_RETURN, WM_KEYDOWN) '发送回车键
i = i + 1
Else
PostMessage hwnd, WM_CHAR, data(i), 0&
PostMessage hwnd, WM_CHAR, data(i + 1), 0&
i = i + 2
End If
Wend
End Sub

Private Sub Timer2_Timer()
Command2.Visible = False
Command1.Enabled = True
Timer2.Enabled = False
End Sub

Private Sub Timer3_Timer() '以下定义按钮热键
If MyHotKey(vbKeyHome) Then Command1_Click
If MyHotKey(vbKeyEnd) Then Command2_Click
End Sub

Private Function MyHotKey(vKeyCode) As Boolean '定义热键变量
MyHotKey = (GetAsyncKeyState(vKeyCode) < 0)
End Function

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值