2011-07-25 1 views
0

キーボードを制御できるプログラムを作成しようとしています。私はすでにSendInput()& keybd_eventしようとしていて、doesntが動作するようにブロックがあります。Keybd_eventを使って "A"を送信するにはどうすればよいですか?

keybd_event()を使用してシフトを保持し、キューの前面にあるgetを押すことができるようにする必要があります。 VKEYを使用して取得されています

Vkeys.GetKey(KeyQueue.front()); 

スキャンコードがによって取得されます。私はそれがこれを使用すると、ここで定義されたこのキーを押す必要が

MapVirtualKey(Vkeys.GetKey(KeyQueue.front()), MAPVK_VK_TO_VSC) 

誰でも手助けできますか?

答えて

0

やや厄介なこと:このようなものを試してみてください。以下のコードはshift/alt/ctrlキーを待ち行列に入れ、キーコードを使用します(必要があればスキャンコードを設定できますが、以前は試していませんでしたが、ASCIIを送信するだけでした)。 shift/alt/ctrlボタンを離します。

void SendSingleKey(int keycode, bool shift, bool ctrl, bool alt) 
{ 
    INPUT * key, keys[8]; 
    UINT ret = 0; 

    if(shift){ 
     key = &(keys[ret++]); 
     key->ki.wVk = VK_SHIFT; 
     key->type = INPUT_KEYBOARD; 
     key->ki.dwFlags = 0; 
     key->ki.time = 0; 
     key->ki.wScan = 0; 
     key->ki.dwExtraInfo = GetMessageExtraInfo(); 
    } 
    if(ctrl){ 
     key = &(keys[ret++]); 
     key->ki.wVk = VK_CONTROL; 
     key->type = INPUT_KEYBOARD; 
     key->ki.dwFlags = 0; 
     key->ki.time = 0; 
     key->ki.wScan = 0; 
     key->ki.dwExtraInfo = GetMessageExtraInfo(); 
    } 
    if(alt){ 
     key = &(keys[ret++]); 
     key->ki.wVk = VK_MENU; 
     key->type = INPUT_KEYBOARD; 
     key->ki.dwFlags = 0; 
     key->ki.time = 0; 
     key->ki.wScan = 0; 
     key->ki.dwExtraInfo = GetMessageExtraInfo(); 
    } 
    key = &(keys[ret++]); 
    key->type = INPUT_KEYBOARD; 
    key->ki.wVk = keycode; 
    key->ki.dwFlags = 0; 
    key->ki.time = 0; 
    key->ki.wScan = 0; 
    key->ki.dwExtraInfo = GetMessageExtraInfo(); 

    key = &(keys[ret++]); 
    key->type = INPUT_KEYBOARD; 
    key->ki.wVk = keycode; 
    key->ki.dwFlags = KEYEVENTF_KEYUP; 
    key->ki.time = 0; 
    key->ki.wScan = 0; 
    key->ki.dwExtraInfo = GetMessageExtraInfo(); 

    if(alt){ 
     key = &(keys[ret++]); 
     key->type = INPUT_KEYBOARD; 
     key->ki.wVk = VK_MENU; 
     key->ki.wScan = 0; 
     key->ki.dwFlags = KEYEVENTF_KEYUP; 
     key->ki.time = 0; 
     key->ki.dwExtraInfo = GetMessageExtraInfo(); 
    } 
    if(ctrl){ 
     key = &(keys[ret++]); 
     key->type = INPUT_KEYBOARD; 
     key->ki.wVk = VK_CONTROL; 
     key->ki.wScan = 0; 
     key->ki.dwFlags = KEYEVENTF_KEYUP; 
     key->ki.time = 0; 
     key->ki.dwExtraInfo = GetMessageExtraInfo(); 
    } 
    if(shift){ 
     key = &(keys[ret++]); 
     key->ki.wVk = VK_SHIFT; 
     key->type = INPUT_KEYBOARD; 
     key->ki.wScan = 0; 
     key->ki.dwFlags = KEYEVENTF_KEYUP; 
     key->ki.time = 0; 
     key->ki.dwExtraInfo = GetMessageExtraInfo(); 
    } 
    SendInput(ret,keys,sizeof(INPUT)); 
} 
関連する問題