Click here to Skip to main content
15,885,141 members
Articles / Multimedia / GDI

A Small GDI+ Sprite Animation Library

Rate me:
Please Sign up or sign in to vote.
4.10/5 (16 votes)
8 Sep 2006CPOL2 min read 64.3K   3.1K   39  
Animate and control sprites using GDI+.
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.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) www.ruskin.com
United States United States
PC Programmer/Analyst

Comments and Discussions