请教,关于钩子截获按键消息实现一键功能,在线等待!谢谢
可是在我按下按键的时候它会一次启动程序的两个实例,也是按下按键的时候启动一次释放的时候启动上次,如何能实现只按下启动,释放不启动。
请大家指点。
以下是代码:
Option ExplicitPublic Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hhook As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hhook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Public Declare Function ShowWindow Lib "user32" (ByVal _
hwnd As Long, ByVal nCmdShow As Long) As LongPublic Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, ByVal _
lpWindowName As String) As Long
Const SW_HIDE = 0
Const SW_SHOW = 5
Public Const VK_CONTROL = &H11
Public Const VK_DELETE = &H2E
Dim hwnd As Long
Public Const WH_KEYBOARD = 2
Public hhook As Long
Sub enablehook()
hhook = SetWindowsHookEx(WH_KEYBOARD, AddressOf myfunc, App.hInstance, 0)
End Sub
Sub disablehook()
Dim ret As Long
ret = UnhookWindowsHookEx(hhook)
End SubPublic Function myfunc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If wParam = vbKeyF12 Then
Shell "E:\游戏\拖拉机\TRACTOR.exe", vbNormalFocus
' myfunc = 1
' Beep
' Exit Function
hwnd = FindWindow(vbNullString, "form1")
ShowWindow hwnd, SW_SHOW
End If
myfunc = CallNextHookEx(hhook, ncode, wParam, lParam)
End Function
可是在我按下按键的时候它会一次启动程序的两个实例,也是按下按键的时候启动一次释放的时候启动上次,如何能实现只按下启动,释放不启动。
请大家指点。
以下是代码:
Option ExplicitPublic Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hhook As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hhook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Public Declare Function ShowWindow Lib "user32" (ByVal _
hwnd As Long, ByVal nCmdShow As Long) As LongPublic Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, ByVal _
lpWindowName As String) As Long
Const SW_HIDE = 0
Const SW_SHOW = 5
Public Const VK_CONTROL = &H11
Public Const VK_DELETE = &H2E
Dim hwnd As Long
Public Const WH_KEYBOARD = 2
Public hhook As Long
Sub enablehook()
hhook = SetWindowsHookEx(WH_KEYBOARD, AddressOf myfunc, App.hInstance, 0)
End Sub
Sub disablehook()
Dim ret As Long
ret = UnhookWindowsHookEx(hhook)
End SubPublic Function myfunc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If wParam = vbKeyF12 Then
Shell "E:\游戏\拖拉机\TRACTOR.exe", vbNormalFocus
' myfunc = 1
' Beep
' Exit Function
hwnd = FindWindow(vbNullString, "form1")
ShowWindow hwnd, SW_SHOW
End If
myfunc = CallNextHookEx(hhook, ncode, wParam, lParam)
End Function
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货