O que pode fazer com que o Windows solte um gancho de teclado de baixo nível (global)?

Temos alguns ganchos de teclado globais instalados viaSetWindowsHookEx comWH_KEYBOARD_LL que parecem aleatoriamente desengatados pelo Windows.

Verificamos que eles não estavam mais conectados porque a chamadaUnhookWindowsHookEx no identificador retornafalse. (Também verificou que ele retornatrue quando estava funcionando corretamente)

Não parece haver uma repetição consistente. Ouvi dizer que eles podem ser desengatados devido a intervalos ou exceções, mas tentei ambos apenas deixando-o em um ponto de interrupção no método de manipulação por mais de um minuto, além de lançar uma exceção aleatória (C #) e ainda parece funcionar.

Em nosso retorno de chamada, postamos rapidamente em outro segmento, portanto esse provavelmente não é o problema. Eu li sobre soluções no Windows 7 para definir o tempo limite mais alto no registro, porque o Windows 7 é mais agressivo com o tempo limite aparentemente (todos nós estamos executando o Win7 aqui, por isso não tenho certeza se isso ocorre em outros sistemas operacionais), mas isso não acontece. parece uma solução ideal.

Eu considerei apenas ter um thread de segundo plano em execução para atualizar o gancho de vez em quando, o que é um hack, mas não conheço nenhuma consequência negativa real disso, e parece melhor do que alterar uma configuração global de registro do Windows .

Alguma outra sugestão ou solução?A classe que define os ganchos e os delegados aos quais estão conectados são estáticos, portanto, eles não devem receber GC.

EDIT: verificado com chamadas paraGC.Collect(); que eles ainda funcionam, para que não sejam recolhidos.

questionAnswers(7)

yourAnswerToTheQuestion