@Grzegorz Świdwa: Tak Kompiluje się, jednak po uruchomieniu programu, i wpisaniu byle jakiej litery lub cyfry występuje błąd:
" Form1+KeyboardHook::CallNextHookEx " zachwiało równowagą stosu. Prawdopodobna przyczyna to niedopasowanie zarządzanego podpisu funkcji PInvoke i niezarządzanego podpisu docelowego. Sprawdź czy konwencja wywołania i parametry podpisu funkcji PInvoke pasują do niezarządzanego podpisu docelowego.
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()
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
Błąd pojawia się w:
Return CallNextHookEx(KeyHook, nCode, wParam, lParam)
Dodam, że w Project > właściwości > Debuguj odznaczyłem "Enable the Visual Studio hosting process"