Pergunta

Eu tenho um sistema em que tenho vários teclados e realmente preciso saber de qual teclado a chave do STROKE vinha. Para explicar a configuração:

  1. Eu tenho um PC normal e teclado USB
  2. Eu tenho uma tela VGA externa com algumas teclas duras
  3. As teclas duras são mapeadas como um teclado USB padrão, enviando um número limitado de códigos -chave (F1, F2, Return, + e -)

Eu tenho um gancho de baixo nível (em C#, mas na verdade chamando a funcionalidade Win32), que é capaz de lidar com a entrada, mesmo quando meu aplicativo não estiver focado.

O problema é que, ao usar o teclado normal, alguns dos códigos de tecla mapeados são escolhidos pelo aplicativo que está sendo acionado na tela externa. Uma das pressões-chave enviadas pela tela externa e usada para confirmação é VK_RETURN. A menos que eu possa identificar o "dispositivo" e filtrar, o usuário pode estar executando ações e confirmando -as em uma tela que nem sequer olham.

Como sei qual teclado foi responsável pela pressão?

Foi útil?

Solução

Sim, eu fico corrigido, meu mal, aprendendo algo novo todos os dias.

Aqui está minha tentativa de compensar isso :):

  • Registre os dispositivos que você deseja usar para entrada bruta (os dois teclados) com :: RegisterRawInputDevices ().

  • Você pode obter esses dispositivos do GetRawInputDevicelist ()

  • Depois de registrar seus dispositivos, você começará a obter mensagens WM_input.

  • O lparam da mensagem WM_Input contém uma estrutura de pranchas RawKears que você pode usar para determinar o teclado de onde a entrada veio, mais o código de chave virtual e o tipo de mensagem (wm_keydown, wm_keyup, ...)

  • Assim, você pode definir um sinalizador de onde a última mensagem veio e, em seguida, enviá -la para os manipuladores de entrada de teclado regulares.

Outras dicas

Não há como fazer isso. O Windows abstrai isso para você. Como mencionado, você precisa escrever/modificar um driver de dispositivo.

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