Pergunta

Estamos trabalhando em um aplicativo .NET que faz um gancho de teclado de baixo nível. Quando chamamos o setWindowshookex em execução dentro do depurador, a chamada sempre falha.

Ao fugir do executável compilado, tudo funciona bem. Se anexarmos aos processos, o setWindowshookex também foi chamado de tudo funciona.

Eu li em algum lugar (não me lembro) que o VS já faz um gancho de teclado de baixo nível, mas isso não deve ser um problema, pois há a função CallNexthook.

Alguém sabe o que está acontecendo?

EDIT: O código é bonito Straigfoward, a exceção é lançada dentro do depurador, mas não fora.

Public Sub New()
    m_callback = New NativeMethods.KeyboardHookDelegate(AddressOf KeyboardCallback)
End Sub

Public Sub Start()
    m_handle = NativeMethods.SetWindowsHookEx(NativeMethods.HookType.WH_KEYBOARD_LL, m_callback, Marshal.GetHINSTANCE(Reflection.Assembly.GetExecutingAssembly().GetModules()(0)).ToInt32, 0)
    If m_handle = 0 Then
        Throw New Exception()
    End If
End Sub
Foi útil?

Solução

Um palpite pode ser que o VS está executando o processo .vshost.exe que pode aparecer diferente na reflexão, mas não posso dizer com certeza. Usamos 'Process.getCurrentProcess (). MainModule` para fazer com que o módulo passe. Talvez tente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top