我正在使用一个简单的循环来捕捉用户按键;
while (1)
{
for(i = 8; i <= 190; i++)
{
if (GetAsyncKeyState(i) == -32767){
//Do stuff
}
}
}
当用户按下某个键时,该程序将执行某些操作,但由于它在无限循环中,且我对C ++不熟悉,这会占用100%的CPU,这对于简单的输入来说并不好。我错在哪里了?我尝试了Sleep()函数(如果我将其放在'for loop'中,则会错过键入的内容,如果我将其放在'while loop'中,则完全不会降低CPU使用率,据我所知),我如何才能同时捕获按键,但又不占用太多CPU;我是否缺少技巧?我相信大多数程序都会捕捉按键,但你不会看到所有程序都占用100%!谢谢。
GetMessage
会一直等待,直到发生键盘事件。对于一个不太优雅的解决方案,在循环中加入Sleep(10);
或其他类似操作。 - chrisRegisterHotkey
和UnregisterHotkey
的组合。然而,我只想在窗口处于焦点时检测按键,因此当窗口失去焦点时,我调用了UnregisterHotkey
,并在窗口重新获得焦点时重新注册它。也许这些函数可以帮助你。如果在窗口失去焦点时不注销热键,可能会干扰其他应用程序的热键。 - Marlon