locked
Good Keyboard Hook RRS feed

  • Question

  • Hi,

    i wanted to ask weather anyone of you has a good code for a Keyboard Hook. I'am looking for a code in wich it differs between "key press", "key down" and "key up" .....  Anyone got a code?

    thx for helping ; )
    Sunday, January 18, 2009 9:15 PM

All replies

  • look at setwindowshookex, and wh_keyboard_ll.  There are a bunch of code samples on the net for what you want to do.


    Compensating what I don't know yet, with what I do know now.
    Sunday, January 18, 2009 10:50 PM
  • hi,

    i had a look at this: http://www.codeproject.com/KB/system/globalsystemhook.aspx

    and translated it to net...just for looking weather i could use this code but i had a problem with a declaration

    so here is the code:

    --------------------------------------------------------------------------------------------------------------

    #Region "using ..."
    Imports System
    Imports System.Drawing
    Imports System.Collections
    Imports System.ComponentModel
    Imports System.Windows.Forms
    #End Region

    Namespace Kennedy.ManagedHooks.SampleHookingApp
        Public Class MainForm
            Inherits System.Windows.Forms.Form
    #Region "Member Variables"

            Private buttonInstall As System.Windows.Forms.Button
            Private buttonUninstall As System.Windows.Forms.Button
            Private components As System.ComponentModel.Container = Nothing
            Private statusBar1 As System.Windows.Forms.StatusBar
            Private textBoxMessages As System.Windows.Forms.TextBox
            Private buttonAbout As System.Windows.Forms.Button

    #End Region

            ' EXAMPLE CODE SECTION
            Private mouseHook As Kennedy.ManagedHooks.MouseHook = Nothing
            Private keyboardHook As Kennedy.ManagedHooks.KeyboardHook = Nothing

            Public Sub New()
                '
                ' Required for Windows Form Designer support
                '
                InitializeComponent()

                '
                ' Add any constructor code after InitializeComponent call
                '

                ' EXAMPLE CODE SECTION

                mouseHook = New Kennedy.ManagedHooks.MouseHook()
                AddHandler mouseHook.MouseEvent, AddressOf mouseHook_MouseEvent

                keyboardHook = New Kennedy.ManagedHooks.KeyboardHook()
                AddHandler keyboardHook.KeyboardEvent, AddressOf keyboardHook_KeyboardEvent
            End Sub

            Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
                If disposing Then
                    ' EXAMPLE CODE SECTION
                    If mouseHook IsNot Nothing Then
                        mouseHook.Dispose()
                        mouseHook = Nothing
                    End If
                    If keyboardHook IsNot Nothing Then
                        keyboardHook.Dispose()
                        keyboardHook = Nothing
                    End If

                    If components IsNot Nothing Then
                        components.Dispose()
                    End If
                End If
                MyBase.Dispose(disposing)
            End Sub

    #Region "Windows Form Designer generated code"
            ''' <summary>
            ''' Required method for Designer support - do not modify
            ''' the contents of this method with the code editor.
            ''' </summary>
            Private Sub InitializeComponent()
                Me.buttonInstall = New System.Windows.Forms.Button()
                Me.buttonUninstall = New System.Windows.Forms.Button()
                Me.textBoxMessages = New System.Windows.Forms.TextBox()
                Me.statusBar1 = New System.Windows.Forms.StatusBar()
                Me.buttonAbout = New System.Windows.Forms.Button()
                Me.SuspendLayout()
                '
                ' buttonInstall
                '
                Me.buttonInstall.Anchor = DirectCast((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right)), System.Windows.Forms.AnchorStyles)
                Me.buttonInstall.FlatStyle = System.Windows.Forms.FlatStyle.System
                Me.buttonInstall.Location = New System.Drawing.Point(8, 8)
                Me.buttonInstall.Name = "buttonInstall"
                Me.buttonInstall.Size = New System.Drawing.Size(268, 32)
                Me.buttonInstall.TabIndex = 0
                Me.buttonInstall.Text = "&Install Mouse and Keyboard Hooks"
                AddHandler Me.buttonInstall.Click, AddressOf Me.buttonInstall_Click
                '
                ' buttonUninstall
                '
                Me.buttonUninstall.Anchor = DirectCast((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right)), System.Windows.Forms.AnchorStyles)
                Me.buttonUninstall.FlatStyle = System.Windows.Forms.FlatStyle.System
                Me.buttonUninstall.Location = New System.Drawing.Point(8, 44)
                Me.buttonUninstall.Name = "buttonUninstall"
                Me.buttonUninstall.Size = New System.Drawing.Size(268, 32)
                Me.buttonUninstall.TabIndex = 1
                Me.buttonUninstall.Text = "&Uninstall Mouse and Keyboard Hooks"
                AddHandler Me.buttonUninstall.Click, AddressOf Me.buttonUninstall_Click
                '
                ' textBoxMessages
                '
                Me.textBoxMessages.Anchor = DirectCast(((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right)), System.Windows.Forms.AnchorStyles)
                Me.textBoxMessages.BackColor = System.Drawing.Color.White
                Me.textBoxMessages.Location = New System.Drawing.Point(0, 84)
                Me.textBoxMessages.Multiline = True
                Me.textBoxMessages.Name = "textBoxMessages"
                Me.textBoxMessages.[ReadOnly] = True
                Me.textBoxMessages.ScrollBars = System.Windows.Forms.ScrollBars.Both
                Me.textBoxMessages.Size = New System.Drawing.Size(348, 320)
                Me.textBoxMessages.TabIndex = 2
                Me.textBoxMessages.TabStop = False
                Me.textBoxMessages.Text = ""
                '
                ' statusBar1
                '
                Me.statusBar1.Location = New System.Drawing.Point(0, 404)
                Me.statusBar1.Name = "statusBar1"
                Me.statusBar1.Size = New System.Drawing.Size(348, 22)
                Me.statusBar1.TabIndex = 3
                '
                ' buttonAbout
                '
                Me.buttonAbout.Anchor = DirectCast(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right)), System.Windows.Forms.AnchorStyles)
                Me.buttonAbout.FlatStyle = System.Windows.Forms.FlatStyle.System
                Me.buttonAbout.Location = New System.Drawing.Point(284, 24)
                Me.buttonAbout.Name = "buttonAbout"
                Me.buttonAbout.Size = New System.Drawing.Size(56, 36)
                Me.buttonAbout.TabIndex = 4
                Me.buttonAbout.Text = "&About"
                '
                ' MainForm
                '
                Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
                Me.ClientSize = New System.Drawing.Size(348, 426)
                Me.Controls.Add(Me.buttonAbout)
                Me.Controls.Add(Me.statusBar1)
                Me.Controls.Add(Me.textBoxMessages)
                Me.Controls.Add(Me.buttonUninstall)
                Me.Controls.Add(Me.buttonInstall)
                Me.Name = "MainForm"
                Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
                Me.Text = "System Hook Test Application"
                Me.ResumeLayout(False)

            End Sub
    #End Region

    #Region "Main Method"
            ''' <summary>
            ''' The main entry point for the application.
            ''' </summary>
            <STAThread()> _
           Private Shared Sub Main()
                '
                ' Give our app an XP theme look.
                '
                Application.EnableVisualStyles()
                Application.DoEvents()

                Application.Run(New MainForm())
            End Sub

    #End Region

            Private Sub buttonInstall_Click(ByVal sender As Object, ByVal e As System.EventArgs)
                ' EXAMPLE CODE SECTION

                AddText("Adding mouse hook.")
                mouseHook.InstallHook()

                AddText("Adding keyboard hook.")
                keyboardHook.InstallHook()

                buttonInstall.Enabled = False
                buttonUninstall.Enabled = True
            End Sub

            Private Sub buttonUninstall_Click(ByVal sender As Object, ByVal e As System.EventArgs)
                ' EXAMPLE CODE SECTION

                mouseHook.UninstallHook()
                AddText("Mouse hook removed.")

                keyboardHook.UninstallHook()
                AddText("Keyboard hook removed.")

                buttonInstall.Enabled = True
                buttonUninstall.Enabled = False
            End Sub

            ' EXAMPLE CODE SECTION
            Private Sub mouseHook_MouseEvent(ByVal mEvent As Kennedy.ManagedHooks.MouseEvents, ByVal point As Point)
                Dim msg As String = String.Format("Mouse event: {0}: ({1},{2}).", mEvent.ToString(), point.X, point.Y)
                AddText(msg)
            End Sub

            ' EXAMPLE CODE SECTION

            Private Sub keyboardHook_KeyboardEvent(ByVal kEvent As Kennedy.ManagedHooks.KeyboardEvents, ByVal key As Keys)
                Dim msg As String = String.Format("Keyboard event: {0}: {1}.", kEvent.ToString(), key)
                AddText(msg)
            End Sub

            Private Sub AddText(ByVal message As String)
                If message Is Nothing Then
                    Exit Sub
                End If

                Dim length As Integer = textBoxMessages.Text.Length + message.Length
                If length >= textBoxMessages.MaxLength Then
                    textBoxMessages.Text = ""
                End If

                If Not message.EndsWith(vbCr & vbLf) Then
                    message += vbCr & vbLf
                End If

                textBoxMessages.Text = message + textBoxMessages.Text
            End Sub

        End Class

    End Namespace


    --------------------------------------------------------------------------------------------------------------

    But :  Kennedy.ManagedHooks.KeyboardEvents and Kennedy.ManagedHooks.MouseEvents isn't defined

    Monday, January 19, 2009 3:24 PM