Pergunta

Estou conectando teclado no aplicativo. O requisito é conectar o teclado em todos os threads no processo.

Eu usei SetWindowshookex API

SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)::KeyboardHookProc, hInst, 0);

O gancho é criado para todos os threads em processo. Isso funciona bem até que o thread de chamadas exista. Assim que o thread de chamadas termina, pare de funcionar.

Existe alguma maneira de conectar o processo em vez de threads em processo.

Foi útil?

Solução

Esta impressão fina nos documentos SDK para LowLevelKeyboardProc é crucial:

Este gancho é chamado no contexto do encadeamento que o instalou. A chamada é feita enviando uma mensagem para o thread que instalou o gancho. Portanto, o encadeamento que instalou o gancho deve ter um loop de mensagem.

Em outras palavras, você deve manter o thread vivo e o thread deve bombear um loop de mensagem. O comportamento que você vê agora é inteiramente por design.

Outras dicas

Conforme MSDN, Wh__Keyboard___ll é aplicado globalmente, não é específico do aplicativo.

Se você deseja instalar o gancho para um processo, use threads específicos Wh___keyboard.

Basta instalar o gancho na função principal. Se você precisar apenas quando um thread específico é executado, você pode usar um sinalizador volátil.

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