2009-08-28 14 views
5

estoy escribiendo (otro, lo sé) reasignador teclado usando C# y Visual Studio 2008.Caps de anulación del bloqueo con Ctrl usando C#

que siguieron this guide para aprender a apoderarse de pulsaciones de teclas de bajo nivel . Esto funciona bien para anular, p. los caracteres alfabéticos normales en mi teclado, pero parece que necesito un poco más para hacer Bloq Mayús actuar como Ctrl.

Mi comprensión (que puede ser incorrecto) es que bloqueo de mayúsculas y Ctrl se manejan completamente diferentes entre sí desde bloqueo de mayúsculas es una tecla de conmutación, mientras que Ctrl es sólo un "normal".

Así que lo que estoy tratando de entender aquí es cómo hacer bloqueo de mayúsculas se comportan como un clave Ctrl en el nivel más bajo y también cómo hacen lo normal Ctrl actúan como una llave de bloqueo de mayúsculas clave.

Gracias

+0

diría, ¿Por qué quieres esto? Si no desea que los datos ingresen en mayúsculas, tenga un paso posterior a la entrada que cambie el caso. – cjb110

Respuesta

2

Mantener un bool que representa el estado esperado de bloqueo de mayúsculas. Cuando se golpea la tecla de bloqueo de mayúsculas, establezca Límite de mayúsculas del sistema al valor de bool. Cuando se activa Ctrl, alternar el estado esperado del bloqueo de mayúsculas y establecer el valor de bloqueo de mayúsculas del sistema en el valor de bool.

usar lo siguiente para establecer el estado de espera 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; 

añadir lógica especial en HookCallback (desde el enlace que ya ha proporcionado) para cuando Ctrl y bloqueo de mayúsculas son golpeados. Bloq Mayús cuando lParam es &H14. Ctrl es cuando lParam es &H11.

Para obtener/poner Caps del sistema de bloqueo valor:

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