两个函数:CheckInput和SendKey
CheckInput 检查是否按下了 Alt-J。当按下 Alt-J 时,会触发一个 bool 值,允许 SendKey 每 500 毫秒持续发送一次 Enter 键。
我需要 CheckInput 仍然能够获取用户输入并更改 bool - 从而停止发送输入 - 而 SendKey 仍在 sleep 中等待,否则现在我必须按住 Alt-J 直到下一个500ms 到。
关于如何做到这一点有什么想法吗?它看起来很基础,但我无法理解它......
(基本上,一个脚本每 500 毫秒按一次回车,并且可以在不需要等待 500 毫秒的情况下打开和关闭)
void CheckInput() {
if ((GetKeyState(0x12) & 0x8000) && (GetKeyState(0x4A) & 0x8000)) {
Active = !Active;
}
}
void SendKey() {
if (Active) {
keybd_event(0x0D, 0x0A, 0, 0);
Sleep(16);
keybd_event(0x0D, 0X0A, KEYEVENTF_KEYUP, 0);
Sleep(500);
}
}
int main()
{
while (1) {
thread t1(CheckInput);
thread t2(SendKey);
t1.join();
t2.join();
}
return 0;
}
最佳答案
如果您可以使用 Windows 事件循环,这会更顺利。
如果你不能,你应该模拟它。
创建一个可以存储事件信息的线程安全队列。您需要两种类型的事件 - 击键和计时器滴答。
一个线程将休眠 500 毫秒并发送一个定时器滴答事件 - 在一个循环中。另一个线程将调用 Console.ReadKey
并发送击键事件 - 也在循环中。
您的主线程将等待事件从队列中到达并处理它们。
关于c++ - sleep 时检查输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43966709/