【发布时间】:2020-10-16 00:04:34
【问题描述】:
我想检查用户是否会在第一次按下后再次按下以在一段时间内实现暂停功能。控制台窗口不在焦点上,所以我不能使用 Console.Read()
while (true)
{
if (GetAsyncKeyState(0x21) != 0)
break; //work just fine, if ESC press it exit while
if (GetAsyncKeyState(0x05) != 0)
{
sw.Start();
while (sw.ElapsedMilliseconds < 2000)
{
// if side mouse button is press, it wait 2sec, work just fine
}
sw.Reset();
}
if (GetAsyncKeyState(0x42) != 0)
{
while (GetAsyncKeyState(0x42) == 0)
{
// wait the second B pressing to resume but it dosen't work
}
}
main_function();
}
这段代码似乎不起作用,我用 writeline 检查了 GetAsyncKeyState,它似乎在几毫秒内获得了按键状态,因此暂停 cicle 将结束。 我似乎在控制台 c# 中我不能使用 c# 具有的特殊功能来检查它。
谢谢!
【问题讨论】:
-
您在寻找什么按键?你想知道他们是否多次按下它?...还是按住它?有什么理由不在循环中使用Console.Read()?详细说明这里应该发生的事情。
-
如果有人按下 B,我只想暂停主循环,当他们再次按下它时恢复它,所以在循环开始时,我只检查 B 是否被按下(0x42),如果如果再次按下。前两个检查工作正常。
-
看看previous SO answer 是否适合你。从技术上讲,它是一个从不显示表单的 WinForms 应用程序,但它允许您捕获按键。可以使用类似的技术来使用 WH_MOUSE_LL 捕获鼠标。