[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