[C con Clase] Tecla Bloq Mayus

Steven Davidson srd4121 en njit.edu
Lun Abr 20 05:35:53 CEST 2009


Hola Emiliano,

Emiliano Guido wrote:
> Buenas...
> Alguien sabe como detectar el estado de la tecla Bloq Mayus?
> O al menos como cambiarle el estado desde codigo.

Todo esto depende de las bibliotecas externas que estés usando. Si usas 
el API de MS-Windows, puedes usar la función 'GetKeyState()' para 
determinar si una tecla ha sido pulsada o no. En tu caso, te interesa 
escribir lo siguiente:

SHORT nEstado = GetKeyState( VK_CAPITAL );

if( nEstado & 1 )
   cout << "Activada";
else
   cout << "Desactivada";

Para establecer la tecla del bloqueo de las mayúsculas, puedes invocar 
'SetKeyboardState()'. Sin embargo, esta función requiere un array de 
todos los estados de todas las teclas. Por lo tanto, sería mejor invocar 
'GetKeyboardState()' previamente, para poder cambiar el estado que nos 
interesa para 'VK_CAPITAL', y luego pasar tal lista alterada a 
'SetKeyboardState()'.

Otra posibilidad es emular una tecla presionada a través de 
'SendInput()'. Por ejemplo,

KEYBDINPUT ki = { VK_CAPITAL, 0, 0, 0, 0 };
INPUT capslock[2] = {0};
capslock[0].type = INPUT_KEYBOARD;
capslock[0].ki = ki;

ki.dwFlags = KEYEVENTF_KEYUP;
capslock[1].type = INPUT_KEYBOARD;
capslock[1].ki = ki;

SendInput( 2, capslock, sizeof(INPUT) );

Ten presente que esta función y las definiciones de las estructuras 
existen a partir de MS-Windows 2000 y por tanto debes definir las 
siguientes constantes simbólicas:

#define _WIN32_WINNT 0x0501
#define WINVER 0x0600

antes de incluir <windows.h>.


Espero que esto te guíe.

Steven





Más información sobre la lista de distribución Cconclase