|
Imports System.Runtime.InteropServices
Imports System.Reflection
Imports System.Drawing
Imports System.Threading
Public NotInheritable Class winKeyboardHandler
#Region " Events "
Public Event KeyPressed(ByVal theKey As winKeyboardAPI.eKeys, ByVal isDown As Boolean)
#End Region
#Region " Variables "
Private m_KeyboardHandle As Integer
<MarshalAs(UnmanagedType.FunctionPtr)> Private m_Callback As winKeyboardAPI.KeyboardHookDelegate
#End Region
#Region " Functions "
Private Function IsHooked(ByRef Hookstruct As winKeyboardAPI.KBDLLHOOKSTRUCT) As Boolean
If (Hookstruct.vkCode = winKeyboardAPI.eKeys.kControl Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kDownArrow Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kEscape Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kF1 Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kF10 Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kF11 Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kF12 Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kF2 Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kF3 Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kF4 Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kF5 Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kF6 Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kF7 Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kF8 Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kF9 Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kLeftArrow Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kLeftMouse Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kMiddleMouse Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kReturn Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kRightArrow Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kRightMouse Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kShift Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kSpace Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kTab Or _
Hookstruct.vkCode = winKeyboardAPI.eKeys.kUpArrow) Then
Return True
End If
Return False
End Function
Private Function KeyboardCallback(ByVal Code As Integer, ByVal wParam As Integer, _
ByRef lParam As winKeyboardAPI.KBDLLHOOKSTRUCT) As Integer
If (Code = winKeyboardAPI.HC_ACTION) Then
If (IsHooked(lParam)) Then
RaiseEvent KeyPressed(CType(lParam.vkCode, winKeyboardAPI.eKeys), CBool(wParam = winKeyboardAPI.WM_KEYDOWN))
Return 1
End If
End If
Return winKeyboardAPI.CallNextHookEx(m_KeyboardHandle, Code, wParam, lParam)
End Function
Private Function Hooked()
Return m_KeyboardHandle <> 0
End Function
#End Region
#Region " Subs "
Public Sub AquireKeyboard()
m_Callback = New winKeyboardAPI.KeyboardHookDelegate(AddressOf KeyboardCallback)
m_KeyboardHandle = winKeyboardAPI.SetWindowsHookEx(winKeyboardAPI.WH_KEYBOARD_LL, m_Callback, _
Marshal.GetHINSTANCE([Assembly].GetExecutingAssembly.GetModules()(0)).ToInt32, 0)
End Sub
Public Sub ReleaseKeyboard()
If (Hooked()) Then
winKeyboardAPI.UnhookWindowsHookEx(m_KeyboardHandle)
m_KeyboardHandle = 0
End If
End Sub
#End Region
#Region " Overrides "
Protected Overrides Sub Finalize()
ReleaseKeyboard()
MyBase.Finalize()
End Sub
#End Region
End Class
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.