Pergunta

Estou escrevendo (Ainda outra, Eu sei) o revaper de teclado usando o C# e o Visual Studio 2008.

eu segui este guia Para aprender a eliminar as prensas de teclas de baixo nível. Isso funciona muito bem para substituir, por exemplo, caracteres alfabéticos normais no meu teclado, mas pareço precisar de um pouco mais para fazer Caps Lock agir como Ctrl.

Meu entendimento (que pode estar incorreto) é que Caps Lock e Ctrl são tratados completamente diferentes um do outro desde Caps Lock é uma tecla alternativa, enquanto Ctrl é apenas um "normal".

Então, o que estou tentando entender aqui é como fazer Caps Lock se comportar como um Ctrl chave no nível mais baixo e também em como tornar o normal Ctrl Atuar como um Caps Lock chave.

Obrigado

Foi útil?

Solução

Mantenha um bool que represente o estado esperado de Caps Lock. Quando a tecla de bloqueio do Caps é atingida, defina os sistemas Caps Lock Valor de volta ao valor do BOOL. Quando Ctrl é atingido, alterne o estado esperado do bloqueio do CAPS e defina o valor de bloqueio de captura do sistema no valor do BOOL.

Use o seguinte para definir o estado esperado inicial:

[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true, CallingConvention=CallingConvention.Winapi)] 
public static extern short GetKeyState(int keyCode); 
bool CapsLock = (((ushort)GetKeyState(0x14)) & 0xffff) != 0;

Adicione a lógica especial no HookCallback (do link que você forneceu) quando Ctrl e Caps Lock são atingidos. Caps Lock é quando o lparam é &H14. Ctrl é quando o lparam é &H11.

Para obter/definir o sistema Caps Lock valor:

http://social.msdn.microsoft.com/forums/en-us/csharpgeneral/thread/fb8308e5-7620-43cc-8ad8-be67d94708fa/

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