2012-07-11 4 views
6

मैं कोड निम्नलिखित है लोअरकेस:SendInput() कीबोर्ड के लिए केवल

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

लेकिन यह मुझे केवल 'एक' उत्पन्न करता है। ऊपरी मामले को उत्पन्न करने के लिए इसे कैसे मजबूर करें?

धन्यवाद।

+5

आपके पास एक शिफ्ट कुंजी धारण करने के अनुकरण के लिए, जैसा कि आप – Shenaniganz

+0

लिखते समय करेंगे, जैसा कि शेनानिगंज ने संकेत दिया था, आप एक महत्वपूर्ण प्रेस अनुकरण कर रहे हैं। क्या आपके पास कीबोर्ड पर "ए" कुंजी _and_ एक लोअर-केस "ए" कुंजी है? – TheZ

+1

'INPUT' प्रकार में एक नेमल्स यूनियन है, इसलिए आपको वास्तव में एक ही चर के' mi' और 'ki' सदस्यों को असाइन नहीं करना चाहिए। – rodrigo

उत्तर

8

संपादित करें: टिप्पणियों में रॉड्रिगो उत्तर के अनुसार कुछ संशोधन।

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

संपादित करें: यहाँ टोपियां मोड़ का एक उदाहरण के साथ एक और कोड है/पत्र भेजने के बाद बंद बदलाव:

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

यहाँ विवरण (मुझे आशा है कि स्पष्टीकरण सही है): SendInput() for keyboard - only uppercase

+1

दरअसल, कोई हो सकता है। यहां प्रश्न (और उत्तर) छोड़ने के लिए अच्छी कॉल। – 0xC0000022L

संबंधित मुद्दे