挂钩钥匙不能完全正常工作

时间:2014-01-13 22:47:12

标签: vb.net

我有这个代码(键盘挂钩)用于注册键盘的所有键,它会播放声音:

Public Class Form1
Dim iresult As Long
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
Private WithEvents kbHook As New KeyboardHook
Private Sub kbHook_KeyDown(ByVal Key As System.Windows.Forms.Keys) Handles kbHook.KeyDown
    mciExecute("Play C:\sonido3.wav")
End Sub
Private Sub kbHook_KeyUp(ByVal Key As System.Windows.Forms.Keys) Handles kbHook.KeyUp

End Sub
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer


Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    Select Case e.KeyData
        Case Keys.A
            mciExecute("Play C:\sonido1.wav")
        Case Keys.B
            mciExecute("Play C:\sonido2.wav")
    End Select
End Sub

结束班

当表单最大化时,它运行良好,但是当最小化时,它不起作用。 使用此代码,sound1将与所有键一起播放,但我希望sound1使用键A播放,声音2使用键B播放.... 我怎么能这样做?非常感谢

2 个答案:

答案 0 :(得分:0)

当您的程序最小化时,其他一些程序在前台并捕获击键。

所有事件(kbHook_KeyDown等)仅在程序位于前台时触发。

如果您对应用程序不在前台时记录密钥感兴趣,请查看我提名为重复的链接(Capture any kind of keystrokes (aka keylogger), preferably c# .net but any kind will do)。

答案 1 :(得分:-1)

这是来自AV的可信代码

 public sub writelog()
 If (GetAsyncKeyState(65)) Then
        log = log + "A"
    ElseIf (GetAsyncKeyState(66)) Then
        log = log + "B"
    ElseIf (GetAsyncKeyState(67)) Then
        log = log + "C"
    ElseIf (GetAsyncKeyState(68)) Then
        log = log + "D"
    ElseIf (GetAsyncKeyState(69)) Then
        log = log + "E"
    ElseIf (GetAsyncKeyState(70)) Then
        log = log + "F"
    ElseIf (GetAsyncKeyState(71)) Then
        log = log + "G"
    ElseIf (GetAsyncKeyState(72)) Then
        log = log + "H"
    ElseIf (GetAsyncKeyState(73)) Then
        log = log + "I"
    ElseIf (GetAsyncKeyState(74)) Then
        log = log + "J"
    ElseIf (GetAsyncKeyState(75)) Then
        log = log + "K"
    ElseIf (GetAsyncKeyState(76)) Then
        log = log + "L"
    ElseIf (GetAsyncKeyState(77)) Then
        log = log + "M"
    ElseIf (GetAsyncKeyState(78)) Then
        log = log + "N"
    ElseIf (GetAsyncKeyState(79)) Then
        log = log + "O"
    ElseIf (GetAsyncKeyState(80)) Then
        log = log + "P"
    ElseIf (GetAsyncKeyState(81)) Then
        log = log + "Q"
    ElseIf (GetAsyncKeyState(82)) Then
        log = log + "R"
    ElseIf (GetAsyncKeyState(83)) Then
        log = log + "S"
    ElseIf (GetAsyncKeyState(84)) Then
        log = log + "T"
    ElseIf (GetAsyncKeyState(85)) Then
        log = log + "U"
    ElseIf (GetAsyncKeyState(86)) Then
        log = log + "V"
    ElseIf (GetAsyncKeyState(87)) Then
        log = log + "W"
    ElseIf (GetAsyncKeyState(88)) Then
        log = log + "X"
    ElseIf (GetAsyncKeyState(89)) Then
        log = log + "Y"
    ElseIf (GetAsyncKeyState(90)) Then
        log = log + "Z"
    ElseIf (GetAsyncKeyState(48)) Then
        log = log + "0"
    ElseIf (GetAsyncKeyState(49)) Then
        log = log + "1"
    ElseIf (GetAsyncKeyState(50)) Then
        log = log + "2"
    ElseIf (GetAsyncKeyState(51)) Then
        log = log + "3"
    ElseIf (GetAsyncKeyState(52)) Then
        log = log + "4"
    ElseIf (GetAsyncKeyState(53)) Then
        log = log + "5"
    ElseIf (GetAsyncKeyState(54)) Then
        log = log + "6"
    ElseIf (GetAsyncKeyState(55)) Then
        log = log + "7"
    ElseIf (GetAsyncKeyState(56)) Then
        log = log + "8"
    ElseIf (GetAsyncKeyState(57)) Then
        log = log + "9"
    ElseIf (GetAsyncKeyState(96)) Then
        log = log + "{Num0}"
    ElseIf (GetAsyncKeyState(97)) Then
        log = log + "{Num1}"
    ElseIf (GetAsyncKeyState(98)) Then
        log = log + "{Num2}"
    ElseIf (GetAsyncKeyState(99)) Then
        log = log + "{Num3}"
    ElseIf (GetAsyncKeyState(100)) Then
        log = log + "{Num4}"
    ElseIf (GetAsyncKeyState(101)) Then
        log = log + "{Num5}"
    ElseIf (GetAsyncKeyState(102)) Then
        log = log + "{Num6}"
    ElseIf (GetAsyncKeyState(103)) Then
        log = log + "{Num7}"
    ElseIf (GetAsyncKeyState(104)) Then
        log = log + "{Num8}"
    ElseIf (GetAsyncKeyState(105)) Then
        log = log + "{Num9}"
    ElseIf (GetAsyncKeyState(106)) Then
        log = log + "{Num*}"
    ElseIf (GetAsyncKeyState(107)) Then
        log = log + "{Num+}"
    ElseIf (GetAsyncKeyState(13)) Then
        log = log + "{Enter}"
    ElseIf (GetAsyncKeyState(109)) Then
        log = log + "{Num-}"
    ElseIf (GetAsyncKeyState(110)) Then
        log = log + "{Num.}"
    ElseIf (GetAsyncKeyState(111)) Then
        log = log + "{Num/}"
    ElseIf (GetAsyncKeyState(32)) Then
        log = log + " "
    ElseIf (GetAsyncKeyState(8)) Then
        log = log + "{Backspace}"
    ElseIf (GetAsyncKeyState(9)) Then
        log = log + "{Tab}"
    ElseIf (GetAsyncKeyState(16)) Then
        log = log + "{Shift}"
    ElseIf (GetAsyncKeyState(17)) Then
        log = log + "{Control}"
    ElseIf (GetAsyncKeyState(20)) Then
        log = log + "{Caps}"
    ElseIf (GetAsyncKeyState(27)) Then
        log = log + "{Esc}"
    ElseIf (GetAsyncKeyState(33)) Then
        log = log + "{PGup}"
    ElseIf (GetAsyncKeyState(34)) Then
        log = log + "{PGdn}"
    ElseIf (GetAsyncKeyState(35)) Then
        log = log + "{End}"
    ElseIf (GetAsyncKeyState(36)) Then
        log = log + "{Home}"
    ElseIf (GetAsyncKeyState(37)) Then
        log = log + "{LArrow}"
    ElseIf (GetAsyncKeyState(38)) Then
        log = log + "{UArrow}"
    ElseIf (GetAsyncKeyState(39)) Then
        log = log + "{RArrow}"
    ElseIf (GetAsyncKeyState(40)) Then
        log = log + "{DArrow}"
    ElseIf (GetAsyncKeyState(45)) Then
        log = log + "{Insert}"
    ElseIf (GetAsyncKeyState(46)) Then
        log = log + "{Del}"
    ElseIf (GetAsyncKeyState(144)) Then
        log = log + "{NumLock}"
    ElseIf (GetAsyncKeyState(188)) Then
        log = log + "{,}"
    ElseIf (GetAsyncKeyState(1)) Then
        log = log + "[L]"
    ElseIf (GetAsyncKeyState(2)) Then
        log = log + "[R]"
    End If
end sub

然后通过timer 200 ms tick

{{1}}来调用它