Итак, я делаю программу на C ++, которая должна удерживать клавишу C, когда клавиша W не нажимается, и отпускать клавишу C, когда нажимается W. Мне были даны простые спецификации: не используйте функцию SendInput и не позволяйте программе спамить ввод кнопки, которую она должна удерживать. Алгоритм, который я реализовал до сих пор, работает на всех концах спецификаций, однако мне сказали, что функция будет удерживать клавишу нажатой до тех пор, пока не будет сказано иначе, - только нажатие клавиши c один раз в течение доли секунды. Функция, которую я использую для нажатия: keybd_event('C', 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0);
Полная реализация, которую я сделал, выглядит следующим образом:
if (!GetAsyncKeyState('W'))
pressed = true;
else
pressed = false;
if (GetAsyncKeyState(VK_ESCAPE)) {
keybd_event('C', 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
cout << "c released\n";
cout << "\n\ninput password\n\n";
getPass();
cout << "\n\npassowrd accepted\n\n";
}
if (inner != pressed) {
if (pressed) {
keybd_event('C', 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0);
cout << "c pressed\n";
inner = pressed;
}else {
keybd_event('C', 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
cout << "c released\n";
inner = pressed;
}
}
В заключение, кто-нибудь знает, как заставить функцию keybd_event удерживать клавишу, пока она не станет сказал, чтобы выпустить это как продемонстрировано? Или кто-нибудь знает не-SendInput функцию, которая может сделать это? Для этой программы я также использовал windows .h для тех, кто может не распознавать имеющиеся функции. Спасибо за ваше время. : -)