Support Forums

Full Version: How to hook the keyboard. [VB.NET] [TuT]
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6 7 8 9 10
OK, this is how to make a low level keyboard hook in VB.NET (A keyboard hook, not a keylogger Nono Although it can be used for the latter.)

So make a form with a text box, then view the code.

Put this into your "Public Class Form1"

Code:
Public Class KeyboardHook
        Private Const HC_ACTION As Integer = 0
        Private Const WH_KEYBOARD_LL As Integer = 13
        Private Const WM_KEYDOWN = &H100
        Private Const WM_KEYUP = &H101
        Private Const WM_SYSKEYDOWN = &H104
        Private Const WM_SYSKEYUP = &H105

        Private Structure KBDLLHOOKSTRUCT
            Public vkCode As Integer
            Public scancode As Integer
            Public flags As Integer
            Public time As Integer
            Public dwExtraInfo As Integer
        End Structure

        Private Declare Function SetWindowsHookEx Lib "user32" _
        Alias "SetWindowsHookExA" _
        (ByVal idHook As Integer, _
        ByVal lpfn As KeyboardProcDelegate, _
        ByVal hmod As Integer, _
        ByVal dwThreadId As Integer) As Integer

        Private Declare Function CallNextHookEx Lib "user32" _
        (ByVal hHook As Integer, _
        ByVal nCode As Integer, _
        ByVal wParam As Integer, _
        ByVal lParam As KBDLLHOOKSTRUCT) As Integer

        Private Declare Function UnhookWindowsHookEx Lib "user32" _
        (ByVal hHook As Integer) As Integer


        Private Delegate Function KeyboardProcDelegate _
        (ByVal nCode As Integer, _
        ByVal wParam As Integer, _
        ByRef lParam As KBDLLHOOKSTRUCT) As Integer


        Public Shared Event KeyDown(ByVal Key As Keys)
        Public Shared Event KeyUp(ByVal Key As Keys)

        Private Shared KeyHook As Integer

        Private Shared KeyHookDelegate As KeyboardProcDelegate

        Public Sub New() ' Installs The Hook

            KeyHookDelegate = New KeyboardProcDelegate(AddressOf KeyboardProc)
            KeyHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyHookDelegate, System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt32, 0)
        End Sub

        Private Shared Function KeyboardProc(ByVal nCode As Integer, ByVal wParam As Integer, ByRef lParam As KBDLLHOOKSTRUCT) As Integer

            If (nCode = HC_ACTION) Then
                Select Case wParam

                    Case WM_KEYDOWN, WM_SYSKEYDOWN

                        RaiseEvent KeyDown(CType(lParam.vkCode, Keys))
                    Case WM_KEYUP, WM_SYSKEYUP

                        RaiseEvent KeyUp(CType(lParam.vkCode, Keys))
                End Select
            End If

            Return CallNextHookEx(KeyHook, nCode, wParam, lParam)
        End Function
        Protected Overrides Sub Finalize()

            UnhookWindowsHookEx(KeyHook)   'Un-Hooks When Program Closes
            MyBase.Finalize()
        End Sub
    End Class

Now under that we create the hook.

Code:
Private WithEvents kbHook As New KeyboardHook

Then we handle the events.

Code:
Private Sub kbHook_KeyDown(ByVal Key As System.Windows.Forms.Keys) Handles kbHook.KeyDown
If Key = Keys.A Then
            TextBox1.Text = TextBox1.Text & "a"

Then Finish the code.

Code:
End Sub
End Class

[Image: hook.png]

Download: http://www.multiupload.com/9OXH9J3G3U

***Originality written by Vorfin(Me) For LeetCoders***
what is a keyboard hook for ?
It intercepts and re-directs the keys that are pressed to your program before they reach their intended destination. That makes it log every key, unlike GetAnsyc which is highly unreliable.
Heh, reminds me of a keylogger.

Anyway, good tutorial. I'll be sure to try this when i get on my computer
Nice job...But keyscrambler beat's the crap out of keylogger's xD.Sorry for rude word's....
Good job, thanks for the help bro.
Good tutorial!

thank you, (5 star)
as always... wonderful coding Vorfin
Vorfin

how can i make it so that if i press ( and shows the ( on the text box please help
Thanx...vorfin
Pages: 1 2 3 4 5 6 7 8 9 10