我想创建一个程序,它只为我按下的每一次击键发送一个击键。我对这个程序有问题,因为即使在我停止按键之后,它仍然发送击键。
例如,如果按下“向上”,它将继续向上按,直到我按下另一个键。
你能帮我拿一下这个吗?
谢谢
int main()
{
// This structure will be used to create the keyboard
// input event.
INPUT ip;
while(1)
{
if (GetAsyncKeyState(VK_UP) < 0)
{
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
ip.ki.wVk = 0x26; // virtual-key code for the "UP arrow" key
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
}
if (GetAsyncKeyState(VK_DOWN) < 0)
{
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
ip.ki.wVk = 0x28; // virtual-key code for the "UP arrow" key
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
}
if (GetAsyncKeyState(VK_RIGHT) < 0)
{
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.time = 0;
ip.ki.wVk = 0;
ip.ki.dwExtraInfo = 0;
ip.ki.wVk = 0x27; // virtual-key code for the "UP arrow" key
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
}
if (GetAsyncKeyState(VK_LEFT) < 0)
{
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
ip.ki.wVk = 0x25; // virtual-key code for the "UP arrow" key
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
}
}
// Exit normally
return 0;
}发布于 2020-06-10 20:32:05
您可以保留是否第一次单击该按钮的状态。然后你只需在释放时重置它。下面是其中一个按钮的示例。
bool up_pressed = false;
int main()
{
if (GetAsyncKeyState(VK_UP) < 0)
{
if (!up_pressed)
{
up_pressed = true;
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
ip.ki.wVk = 0x26; // virtual-key code for the "UP arrow" key
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
}
}
else
{
up_pressed = false;
}
}https://stackoverflow.com/questions/62303564
复制相似问题