我认为您更愿意仅在松开按键时才执行“一次”功能,而不是在您按下(按下)它们时执行您的功能。
您不需要任何额外的标志和辅助变量来定义、分配、分配为 0,并将每个设置为 1 并重置为 0 等等,以实现此目标。您所需要的只是:首先您必须在 while(1) 的范围内使用 GetKeyState 函数来检查您何时按下了一个键。当表达式返回 true 时,执行器指针(执行代码行然后在您进入或跳过时前进到下一个代码行的箭头)将进入 if 语句的范围。然后立即将它困在一个循环中,并在您按下的键仍然按下时将其困在其中,并在它要执行该功能之前停止它,并在您释放该键时释放它,然后让它执行功能。
例如,要在您按下并释放空格键时只执行“一次” DoSpaceKeyTask 函数,然后执行以下应该可以工作的代码:
while (1)
{
if (GetKeyState(VK_SPACE) & 0x80)
{
//The code here executes ONCE at the moment the space bar was pressed
cout << "Space pressed.\r\n";
while (GetKeyState(VK_SPACE) & 0x80) //You can write there ';' instead '{' and '}' below
{
//The executor pointer is trapped here while space bar is depressed and it will be free once space bar is released
}
//The code here executes ONCE at the moment the space bar was released
cout << "Space released.\r\n";
DoSpaceKeyTask();
}
}
与 DoOtherKeyTask 函数相同:
while (1)
{
if (GetKeyState(OTHER_KEY) & 0x80)
{
//The code here executes ONCE at the moment the other key was pressed
cout << "Other key pressed.\r\n";
while (GetKeyState(OTHER_KEY) & 0x80) //You can write there ';' instead '{' and '}' below
{
//The executor pointer is trapped here while other key is depressed and it will be free once other key is released
}
//The code here executes ONCE at the moment the other key was released
cout << "Other key released.\r\n";
DoOtherKeyTask();
}
}
如果您已经使用了 BT_ 的想法或 Pawel Zubrycki 的想法,现在您想使用我的想法,那么您可以删除他们建议的所有标志和变量,因为您不再需要它们了。
顺便说一句,我已经尝试过 Pawel Zubrycki 发布的代码,但它对我不起作用。当我真正按下空格键或我选择的其他键时,没有显示说我按下了空格键或其他键的输出。