2012-07-11 6 views
6

ich folgenden Code haben:Send() für Tastatur - Kleinbuchstaben nur

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)); 

aber es erzeugt mich nur 'a'. Wie erzwingen Sie es, auch Großbuchstaben zu generieren?

Danke.

+5

Sie haben um zu simulieren, eine Shift-Taste zu halten, genau wie beim Tippen – Shenaniganz

+0

Wie Shenaniganz angedeutet hat, simulieren Sie einen Tastendruck. Haben Sie eine Großbuchstaben-Taste "A" und eine "A" -Taste auf Ihrer Tastatur? – TheZ

+1

'INPUT' Typ enthält eine name Union Einheit, also sollten Sie nicht 'mi' und' ki' Elemente der gleichen Variablen zuweisen. – rodrigo

Antwort

8

EDIT: einige Änderungen nach Rodrigo Antwort in Kommentaren.

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: Hier ist ein weiterer Code mit einem Beispiel Kappe von Dreh-/shift ab, nachdem Brief zu senden:

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)); 

Erklärung hier (ich hoffe, dass die Erklärung richtig ist): SendInput() for keyboard - only uppercase

+1

In der Tat könnte jemand. Guter Ruf, hier die Frage zu beantworten. – 0xC0000022L