Winapi 如何使用Keybd_事件发送;A「;例如
我正试图写一个程序来控制键盘。我已经尝试过SendInput()&keybd_事件,但有一个块似乎不起作用 我需要它能够使用keybd_event()来按住shift键并按下队列前面的get键。 检索VKey时使用以下命令:Winapi 如何使用Keybd_事件发送;A「;例如,winapi,keyboard-events,Winapi,Keyboard Events,我正试图写一个程序来控制键盘。我已经尝试过SendInput()&keybd_事件,但有一个块似乎不起作用 我需要它能够使用keybd_event()来按住shift键并按下队列前面的get键。 检索VKey时使用以下命令: Vkeys.GetKey(KeyQueue.front()); 通过以下方式检索扫描代码: MapVirtualKey(Vkeys.GetKey(KeyQueue.front()), MAPVK_VK_TO_VSC) 我需要它来使用这个并按下这里定义的这个键 有人能帮忙
Vkeys.GetKey(KeyQueue.front());
通过以下方式检索扫描代码:
MapVirtualKey(Vkeys.GetKey(KeyQueue.front()), MAPVK_VK_TO_VSC)
我需要它来使用这个并按下这里定义的这个键
有人能帮忙吗?有点乱:试试这样的东西。下面的代码将shift/alt/ctrl键排队,然后使用keycode(如果必须,您可以设置扫描代码,但我以前没有尝试过;我只需要发送ASCII),然后发送keyup事件以释放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));
}