2012-07-11 19 views
6

He siguiente código:SendInput() para el teclado - solamente con una letra minúscula

INPUT Input = { 0 }; 
Input.type  = INPUT_KEYBOARD; 
Input.mi.dwFlags = KEYEVENTF_EXTENDEDKEY; 
Input.ki.wVk = 'A'; // tried 0x41, (UCHAR)VkKeyScan('A') 
SendInput(1, &Input, sizeof(INPUT)); 

pero me genera solamente 'a'. ¿Cómo forzarlo a generar mayúsculas también?

Gracias.

+5

Tienes para simular la celebración de una tecla de mayúsculas, tal como lo haría al escribir – Shenaniganz

+0

Como insinuó Shenaniganz, está simulando presionar una tecla. ¿Tiene una tecla "A" en mayúscula y una "a" minúscula en su teclado? – TheZ

+1

El tipo 'INPUT' contiene una unión nameelss, por lo que no debería asignar miembros' mi' y 'ki' de la misma variable. – rodrigo

Respuesta

8

EDIT: algunas modificaciones según rodrigo responden en los comentarios.

INPUT Input = { 0 }; 
// shift key down 
Input.type  = INPUT_KEYBOARD; 
Input.ki.wVk = VK_LSHIFT; 
SendInput(1, &Input, sizeof(INPUT)); 

// 'a' key down 
Input.type  = INPUT_KEYBOARD; 
Input.ki.wVk = 'A'; 
SendInput(1, &Input, sizeof(INPUT)); 

// 'a' key release 
Input.type  = INPUT_KEYBOARD; 
Input.ki.dwFlags = KEYEVENTF_KEYUP; 
Input.ki.wVk = 'A'; 
SendInput(1, &Input, sizeof(INPUT)); 

// shift key release 
Input.type  = INPUT_KEYBOARD; 
Input.ki.dwFlags = KEYEVENTF_KEYUP; 
Input.ki.wVk = VK_LSHIFT; 
SendInput(1, &Input, sizeof(INPUT)); 

EDIT: aquí es otro código con un ejemplo de convertir tapas/shift después de enviar la carta:

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' 
Event.type = INPUT_KEYBOARD; 
Event.ki.dwFlags = KEYEVENTF_SCANCODE; 
Event.ki.wScan = mappedKey; 
SendInput(1, &Event, sizeof(Event)); 

// release upper case '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' 
Event.type = INPUT_KEYBOARD; 
Event.ki.dwFlags = KEYEVENTF_SCANCODE; 
Event.ki.wScan = mappedKey1; 
SendInput(1, &Event, sizeof(Event)); 

// release lower case 'a' 
Event.type = INPUT_KEYBOARD; 
Event.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP; 
Event.ki.wScan = mappedKey1; 
SendInput(1, &Event, sizeof(Event)); 

explicación aquí (espero que la explicación es correcta): SendInput() for keyboard - only uppercase

+1

De hecho, alguien podría. Buena llamada para dejar la pregunta (y la respuesta) aquí. – 0xC0000022L

Cuestiones relacionadas