急求VB代码 请高手指点

2025-02-28 02:52:19
推荐回答(3个)
回答1:

新建工程,窗体FORM1,添加按钮Command1,计时器Timer1,Timer2
Timer1,Timer2的Enabled属性都改成False,Interval属性都改成300

窗口代码

Private a As Integer
Private b As Integer

Public Sub Command1_Click()
Timer1.Enabled = False
Timer2.Enabled = False
End Sub

Private Sub Form_Load()
a = 1
b = 1
Call ZhuCeHotKey(Me.hwnd)
End Sub

Private Sub Form_Unload(Cancel As Integer)
Call UnLoadHotKey(Me.hwnd)
End Sub

Public Sub Timer1_Timer()
Timer2.Enabled = False
Timer1.Enabled = True
If a = 1 Then
SendKeys "j"
a = 2
ElseIf a = 2 Then
SendKeys "k"
a = 3
ElseIf a = 3 Then
SendKeys "l"
a = 1
End If
End Sub

Public Sub Timer2_Timer()
Timer1.Enabled = False
Timer2.Enabled = True
If b = 1 Then
SendKeys "o"
b = 2
ElseIf b = 2 Then
SendKeys "i"
b = 3
ElseIf b = 3 Then
SendKeys "u"
b = 1
End If
End Sub

添加一模块

模块代码

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long

Private Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long

Private Const WM_HOTKEY = &H312

Private Const GWL_WNDPROC = (-4)

Private Const VK_F6 = &H75

Private Const VK_F7 = &H76

Private Const VK_F8 = &H77

Private Const VK_F5 = &H74

Dim PrevWndProc&

Public Function ZhuCeHotKey(MeHWND As Long)

Dim ret As Long
'记录原来的window程序地址
PrevWndProc = GetWindowLong(MeHWND, GWL_WNDPROC)

'用自定义程序代替原来的window程序
ret = SetWindowLong(MeHWND, GWL_WNDPROC, AddressOf SubWndProc)

ret = RegisterHotKey(MeHWND, 21345, 0, VK_F5)
If ret = 0 Then
MsgBox "F5热键失败!"
End If

ret = RegisterHotKey(MeHWND, 21346, 0, VK_F6)
If ret = 0 Then
MsgBox "F6热键失败!"
End If

ret = RegisterHotKey(MeHWND, 21347, 0, VK_F7)
If ret = 0 Then
MsgBox "F7热键失败!"
End If

ret = RegisterHotKey(MeHWND, 21348, 0, VK_F8)
If ret = 0 Then
MsgBox "F8热键失败!"
End If

End Function

Private Function SubWndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

If Msg = WM_HOTKEY And wParam = 21345 Then
Call Form1.Timer1_Timer
End If
If Msg = WM_HOTKEY And wParam = 21346 Then
Call Form1.Timer2_Timer
End If
If Msg = WM_HOTKEY And wParam = 21347 Then
MsgBox "F7"
End If
If Msg = WM_HOTKEY And wParam = 21348 Then
Call Form1.Command1_Click
End If

'调用默认的窗口处理过程

SubWndProc = CallWindowProc(PrevWndProc, hwnd, Msg, wParam, lParam)

End Function

Public Function UnLoadHotKey(MeHWND As Long)
Dim ret As Long
'取消Message的截取,使之送往原来的window程序
ret = SetWindowLong(MeHWND, GWL_WNDPROC, PrevWndProc)
Call UnregisterHotKey(MeHWND, VK_F5)
Call UnregisterHotKey(MeHWND, VK_F6)
Call UnregisterHotKey(MeHWND, VK_F7)
Call UnregisterHotKey(MeHWND, VK_F8)
End Function

回答2:

没弄懂你的意思

回答3:

不会是用来玩模拟游戏用的吧。