Tópico anterior Próximo tópico Novo tópico
VB.NET
#490714 - 11/10/2019 09:46:15 | ||||
![]() ALEMES JUNDIAI Cadast. em:Outubro/2019 ![]() |
Última edição em 11/10/2019 09:48:05 por ALEMES Pessoal, bom dia!Estou com um problema com uma aplicação, onde tenho o seguinte senário. ao apertar Enter em qualquer tela ou aplicativo a aplicação retorna com a rotina. Ex: quando o usuário digitar em uma caixa de testo no Google chrome e der enter a aplicação roda. beleza ate esta rodando, porem por 5 minutos ou menos e ja para de reconhecer o Enter. Alguem ai conhece o procedimento e oque pode estar acontecendo? Estou a 3 dias e não consegui evoluir Imports System.Runtime.InteropServices Public Class KeyboardHook <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> Private Overloads Shared Function SetWindowsHookEx(ByVal idHook As Integer, ByVal HookProc As KBDLLHookProc, ByVal hInstance As IntPtr, ByVal wParam As Integer) As Integer End Function <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> Private Overloads Shared Function CallNextHookEx(ByVal idHook As Integer, ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer End Function <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> Private Overloads Shared Function UnhookWindowsHookEx(ByVal idHook As Integer) As Boolean End Function <StructLayout(LayoutKind.Sequential)> Private Structure KBDLLHOOKSTRUCT Public vkCode As UInt32 Public scanCode As UInt32 Public flags As KBDLLHOOKSTRUCTFlags Public time As UInt32 Public dwExtraInfo As UIntPtr End Structure <Flags()> Private Enum KBDLLHOOKSTRUCTFlags As UInt32 LLKHF_EXTENDED = &H1 LLKHF_INJECTED = &H10 LLKHF_ALTDOWN = &H20 LLKHF_UP = &H80 End Enum Public Shared Event KeyDown(ByVal Key As Keys) Public Shared Event KeyUp(ByVal Key As Keys) Private Const WH_KEYBOARD_LL As Integer = 13 Private Const HC_ACTION As Integer = 0 Private Const WM_KEYDOWN = &H100 Private Const WM_KEYUP = &H101 Private Const WM_SYSKEYDOWN = &H104 Private Const WM_SYSKEYUP = &H105 Private Delegate Function KBDLLHookProc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer Private KBDLLHookProcDelegate As KBDLLHookProc = New KBDLLHookProc(AddressOf KeyboardProc) Private HHookID As IntPtr = IntPtr.Zero Private Function KeyboardProc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer If (nCode = HC_ACTION) Then Dim struct As KBDLLHOOKSTRUCT Select Case wParam Case WM_KEYDOWN, WM_SYSKEYDOWN RaiseEvent KeyDown(CType(CType(Marshal.PtrToStructure(lParam, struct.GetType()), KBDLLHOOKSTRUCT).vkCode, Keys)) Case WM_KEYUP, WM_SYSKEYUP RaiseEvent KeyUp(CType(CType(Marshal.PtrToStructure(lParam, struct.GetType()), KBDLLHOOKSTRUCT).vkCode, Keys)) End Select End If Dim ret As Integer = CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam) Return ret End Function Public Sub New() HHookID = SetWindowsHookEx(WH_KEYBOARD_LL, KBDLLHookProcDelegate, System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt32, 0) If HHookID = IntPtr.Zero Then Throw New Exception("Error!") End If End Sub Protected Overrides Sub Finalize() If Not HHookID = IntPtr.Zero Then UnhookWindowsHookEx(HHookID) End If MyBase.Finalize() End Sub End Class ahh e quando vou declarar em um outro modulo, estou utilizando. Public WithEvents kbHook As New KeyboardHook
|
|||
Tópico anterior Próximo tópico Novo tópico