2012-07-11 30 views
6

Tôi đã mã sau:SendInput() cho bàn phím - chỉ chữ thường

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

nhưng nó tạo ra tôi chỉ 'a'. Làm thế nào để buộc nó để tạo ra trường hợp trên là tốt?

Cảm ơn.

+5

Bạn có để mô phỏng giữ phím shift, giống như khi gõ – Shenaniganz

+0

Khi Shenaniganz ám chỉ, bạn đang mô phỏng một phím bấm. Bạn có chữ "A" ở trên chữ hoa và phím "a" thấp hơn trên bàn phím của mình không? – TheZ

+1

'INPUT' loại chứa một liên minh tên, vì vậy bạn thực sự không nên gán cho' mi' và 'ki' thành viên của cùng một biến. – rodrigo

Trả lời

8

EDIT: một số sửa đổi theo câu trả lời rodrigo trong nhận xét.

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: đây là một mã với một ví dụ về biến mũ/chuyển ra sau khi gửi thư:

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

giải thích ở đây (Tôi hy vọng lời giải thích là đúng): SendInput() for keyboard - only uppercase

+1

Thật vậy, ai đó có thể. Tốt gọi để rời khỏi câu hỏi (và câu trả lời) ở đây. – 0xC0000022L

Các vấn đề liên quan