vez teclado tecla solucionado solo minusculas mayusculas mayus mac loco escribe desbloquear desactiva como bloq activar winapi keyboard sendinput

winapi - solucionado - SendInput() para teclado, solo mayúsculas



mi teclado solo escribe en mayusculas mac (1)

El problema fue con

Input.mi.dwFlags

debería ser

Input.ki.dwFlags

gracias a rodrigo

Otra forma es usar el indicador KEYEVENTF_SCANCODE. Luego tenemos que escanear nuestro char usando VkKeyScan () - http://msdn.microsoft.com/en-us/library/windows/desktop/ms646329(v=vs.85).aspx , que nos da el código de clave virtual en bajo byte y estado (shift, ctrl etc.) en byte alto.

Debido al uso de códigos de exploración, tenemos que mapear nuestro código virtual para escanear código utilizando MapVirtualKey () con valor MAPVK_VK_TO_VSC, MSDN dice:

uCode es un código de clave virtual y se traduce en un código de exploración. Si se trata de un código de clave virtual que no distingue entre las teclas izquierda y derecha, se devuelve el código de exploración de la izquierda. Si no hay traducción, la función devuelve 0.

y luego pasarlo al campo wScan de la estructura Input.ki, porque según MSDN si usamos códigos de exploración, ignora wVk y usa wScan, MSDN dice:

Si se especifica, wScan identifica la clave y wVk se ignora.

Por lo tanto, el código puede verse más o menos así:

INPUT Event = { 0 }; const SHORT key = VkKeyScan(''a''); const UINT mappedKey = MapVirtualKey( LOBYTE( key ), 0 ); // Press shift key Event.type = INPUT_KEYBOARD; Event.ki.dwFlags = KEYEVENTF_SCANCODE; Event.ki.wScan = MapVirtualKey( VK_LSHIFT, 0 ); SendInput( 1, &Event, sizeof( Event ) ); // upper case ''A'' (press down) Event.type = INPUT_KEYBOARD; Event.ki.dwFlags = KEYEVENTF_SCANCODE; Event.ki.wScan = mappedKey; SendInput( 1, &Event, sizeof( Event ) ); // release ''A'' Event.type = INPUT_KEYBOARD; Event.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP; Event.ki.wScan = mappedKey; SendInput( 1, &Event, sizeof( Event ) ); // Release shift key Event.type = INPUT_KEYBOARD; Event.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP; Event.ki.wScan = MapVirtualKey( VK_LSHIFT, 0 ); SendInput( 1, &Event, sizeof( Event ) ); const SHORT key1 = VkKeyScan(''a''); const UINT mappedKey1 = MapVirtualKey( LOBYTE( key1 ), 0 ); // lower case ''a'' (press down) Event.type = INPUT_KEYBOARD; Event.ki.dwFlags = KEYEVENTF_SCANCODE; Event.ki.wScan = mappedKey1; SendInput( 1, &Event, sizeof( Event ) ); // release ''a'' Event.type = INPUT_KEYBOARD; Event.ki.dwFlags = KEYEVENTF_SCANCODE; Event.ki.wScan = mappedKey1; SendInput( 1, &Event, sizeof( Event ) );

Si he dicho algo mal, por favor corrígeme.

Bastante gracioso. Acabo de preguntar hace unos minutos aquí SendInput () para el teclado, solo minúsculas , cómo enviar letras en mayúsculas. La solución fue enviar turno antes de la carta. Pero después de encender el turno no puedo apagarlo ...

Estoy intentando con la bandera KEYEVENTF_KEYUP así:

INPUT Input = { 0 }; Input.type = INPUT_KEYBOARD; Input.mi.dwFlags = KEYEVENTF_EXTENDEDKEY; Input.ki.wVk = VK_LSHIFT; SendInput( 1, &Input, sizeof( INPUT ) ); Input.type = INPUT_KEYBOARD; Input.mi.dwFlags = KEYEVENTF_EXTENDEDKEY; Input.ki.wVk = ''A''; SendInput( 1, &Input, sizeof( INPUT ) ); Input.type = INPUT_KEYBOARD; Input.mi.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_EXTENDEDKEY; Input.ki.wVk = VK_LSHIFT; SendInput( 1, &Input, sizeof( INPUT ) ); Input.type = INPUT_KEYBOARD; Input.mi.dwFlags = KEYEVENTF_EXTENDEDKEY; Input.ki.wVk = ''A''; SendInput( 1, &Input, sizeof( INPUT ) );

pero parece no funcionar en absoluto. Siempre envía AA.

Gracias.