Thread Rating:
  • 4 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to hook the keyboard. [VB.NET] [TuT]
#1
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***
[Image: Lj]
Reply
#2
what is a keyboard hook for ?
Reply
#3
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.
[Image: Lj]
Reply
#4
Heh, reminds me of a keylogger.

Anyway, good tutorial. I'll be sure to try this when i get on my computer
lazydude2000 Wrote:I hate Minnesota...

Omniscient Wrote:btw...I grew up in Minnesota.
Reply
#5
Nice job...But keyscrambler beat's the crap out of keylogger's xD.Sorry for rude word's....
Reply
#6
Good job, thanks for the help bro.
Reply
#7
Good tutorial!

thank you, (5 star)
Reply
#8
as always... wonderful coding Vorfin
Reply
#9
Vorfin

how can i make it so that if i press ( and shows the ( on the text box please help
Reply
#10
Thanx...vorfin
[Image: 2d75599e9a.png]:superman:
Reply


Possibly Related Threads...
Thread Author Replies Views Last Post
  VB.NET Port Scanner [TUT] Fragma 30 8,597 11-27-2012, 11:26 PM
Last Post: ƃu∀ ıʞƃu∀
  [TUT] MD5 Encrypter & Finder [VB.NET] Fragma 12 4,326 11-25-2012, 10:36 PM
Last Post: ƃu∀ ıʞƃu∀
  [TUT] How to make a simple WebBrowser in VB 2010! [TUT] - [ Pictures] Statics 95 34,131 10-07-2012, 06:56 AM
Last Post: a99
  [TUT]Enable and Disable TaskManger in vb.net [TUT] HB Virus 4 1,435 12-19-2011, 10:10 AM
Last Post: euverve
  [Vb.Net]Save user settings with "My.Settings"[TUT] Digital-Punk 7 3,900 11-21-2011, 09:29 AM
Last Post: UrbanByte

Forum Jump:


Users browsing this thread: 1 Guest(s)