vb6keyboard-hookcrash

Using vbAccelarator Win32 Hook crashes application along with VB IDE


I'm working on VB6 project where I need to have keyboard short-cuts for Buttons on Toolbar Control. To accomplish this, I have used Win32 Hooks library from vbAccelerator. Here's my IWindowsHook_HookProc function, that I use to retrieve Key strokes & perform action based on pressed short-cut (Ctrl + N for New, Ctrl + O for Open and Ctrl + S for Save) , but the I don't know what's wrong with the code that crashes my application along with VB6 IDE. The function is currently incomplete as I just tried to identify Ctrl + N key combination to test this feature. Please help me out.... :-|

Private Function IWindowsHook_HookProc(ByVal eType As EHTHookTypeConstants, ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long, bConsume As Boolean) As Long
If KeyboardlParam(lParam).KeyDown Then
     Select Case True
           Case Me.ActiveControl = Me
                 If wParam = vbKeyControl + vbKeyN Then
                        frmNewReport.show
                        bConsume = True
                 End If
     End Select
End If

Solution

  • I've found a solution to my own question, its still crash-prone if not handled carefully, but now my application actually responds to key combinations that I wanted, Ctrl + N, Ctrl + O, etc. Following is my rectified code that works fine as far as I know. Do suggest if you find any bug in it that lead to crash my application.

    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
    
    Private Property Get CtrlPressed() As Boolean
       CtrlPressed = (GetAsyncKeyState(vbKeyControl) <> 0)
    End Property
    
    Private Function IWindowsHook_HookProc(ByVal eType As EHTHookTypeConstants, ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long, bConsume As Boolean) As Long
    
    If wParam = vbKeyN Then
        If CtrlPressed Then
            LoadFormNewReport 'Method that opens Child Form 'New Report'
        End If
        bConsume = True
    
    ElseIf wParam = vbKeyS Then
        If CtrlPressed Then
            SaveNewReport 'Method that saves new Report
        End If
        bConsume = True
    
    ElseIf wParam = vbKeyF5 Then
        If Not CtrlPressed Then
            frmSettings.Show 'This form needs to be displayed Modally but if tried so then crashes application along with VB  IDE, other short-cuts work fine.
            bConsume = True
        End If
    
    End If
    
    End Function