2009-06-20 14 views
8

मैं SendInput() का उपयोग किसी अन्य एप्लिकेशन (नोटपैड) को वाक्य भेजने के लिए करने का प्रयास कर रहा हूं और फिर इसे कुंजी दर्ज करें।SendInput() कीबोर्ड अक्षरों सी/सी ++

कोई भी कोड स्निपेट? या मदद

उत्तर

1

SendInput फ़ंक्शन INPUT संरचनाओं की एक सरणी स्वीकार करता है। इनपुट संरचनाएं या तो माउस या कीबोर्ड ईवेंट हो सकती हैं। keyboard event structure में एक सदस्य है जिसे डब्लूवीके कहा जाता है जो कीबोर्ड पर कोई भी कुंजी हो सकता है। Winuser.h शीर्षलेख फ़ाइल प्रत्येक कुंजी के लिए मैक्रो परिभाषाएं (VK_ *) प्रदान करती है।

5
INPUT input; 
WORD vkey = VK_F12; // see link below 
input.type = INPUT_KEYBOARD; 
input.ki.wScan = MapVirtualKey(vkey, MAPVK_VK_TO_VSC); 
input.ki.time = 0; 
input.ki.dwExtraInfo = 0; 
input.ki.wVk = vkey; 
input.ki.dwFlags = 0; // there is no KEYEVENTF_KEYDOWN 
SendInput(1, &input, sizeof(INPUT)); 

input.ki.dwFlags = KEYEVENTF_KEYUP; 
SendInput(1, &input, sizeof(INPUT)); 

List of virtual key codes Theres .....

+2

उपयोग 'VkKeyScanEx (चार, कुंजीपटल लेआउट)' इस उदाहरण :) में अपने "आम" 'chars' डाल करने के लिए ... 'input.ki.wVk = VkKeyScanEx ('a', kbl); 'कीबोर्ड के लिए के रूप में वर्तमान विंडो के कीबोर्ड को लोड करने का सबसे आसान तरीका है:' HKL kbl = GetKeyboardLayout (0); ' –

+0

धन्यवाद और @ jave.web उत्तर। मैंने नीचे दिए गए उत्तर में चरित्र इनपुट करने के लिए अपना कोड बनाया (क्षमा करें मुझे टिप्पणी अनुभाग में कोड डालने का तरीका नहीं मिल रहा है)। –

0

मैं पढ़ @ नाथन के कोड के बाद एक संशोधन किए गए , this reference और @ jave.web के सुझाव के साथ संयुक्त। इस कोड का उपयोग अक्षरों (ऊपरी मामले और निचले मामले दोनों) इनपुट करने के लिए किया जा सकता है।

#define WINVER 0x0500 
#include<windows.h> 
void pressKeyB(char mK) 
{ 
    HKL kbl = GetKeyboardLayout(0); 
    INPUT ip; 
    ip.type = INPUT_KEYBOARD; 
    ip.ki.time = 0; 
    ip.ki.dwFlags = KEYEVENTF_UNICODE; 
    if ((int)mK<65 && (int)mK>90) //for lowercase 
    { 
     ip.ki.wScan = 0; 
     ip.ki.wVk = VkKeyScanEx(mK, kbl); 
    } 
    else //for uppercase 
    { 
     ip.ki.wScan = mK; 
     ip.ki.wVk = 0; 

    } 
    ip.ki.dwExtraInfo = 0; 
    SendInput(1, &ip, sizeof(INPUT)); 
} 

नीचे वापसी कुंजी दबाने के लिए समारोह है:

void pressEnter() 
{ 
    INPUT ip; 
    ip.type = INPUT_KEYBOARD; 
    ip.ki.time = 0; 
    ip.ki.dwFlags = KEYEVENTF_UNICODE; 
    ip.ki.wScan = VK_RETURN; //VK_RETURN is the code of Return key 
    ip.ki.wVk = 0; 

    ip.ki.dwExtraInfo = 0; 
    SendInput(1, &ip, sizeof(INPUT)); 

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