- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当我使用 GetKeyState 或 GetAsyncKeyState 按下某些键时,我遇到了问题,两者都记录了按下键的历史记录。所以当我有一个 cin>> 这是我按下的键。
if(GetKeyState('1'))
{
//do stuff
while(GetAsyncKeyState('1'));
}
if(GetAsyncKeyState('2'))
{
//do other stuff
while(GetAsyncKeyState('2'));
}
if(GetAsyncKeyState('3'))
{
cout<<"Did you press 1? (y/n)"<<endl;
cin>>answ;
if(answ=='y')
{
//do stuff
}
while(GetAsyncKeyState('3'));
}
这是我所拥有的:
Did you press 1?(y/n)
11223_
如何删除按键的历史记录?
最佳答案
其实我之前也遇到过这个问题。首先,您不应该在控制台中使用混合输入(例如“stdio.h”和“conio.h”以及“iostream”和“windows”)。在您的情况下,我会选择 Windows 控制台(MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073(v=vs.85).aspx)但正如您所想,我也很懒惰,为此我做了一个解决方法,代码如下:
void ClearConsoleInputBuffer()
{
// If you happen to have any trouble clearing already cleared buffer, uncomment the section below.
/* keybd_event('S', 0, 0, 0);
keybd_event('S', 0,KEYEVENTF_KEYUP, 0);
keybd_event(VK_BACK, 0, 0, 0);
keybd_event(VK_BACK, 0,KEYEVENTF_KEYUP, 0); */
PINPUT_RECORD ClearingVar1 = new INPUT_RECORD[256];
DWORD ClearingVar2;
ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE),ClearingVar1,256,&ClearingVar2);
delete[] ClearingVar1;
}
现在,它的作用是什么?当您在控制台中键入字符时,它们都存储在控制台缓冲区中。当您编写 cin >> variable;
时,您实际上不是直接从用户那里获取字符,而是从缓冲区中获取字符。让我举个例子:
#include "windows.h"
#include "iostream"
using namespace std;
int main()
{
cout << "write something";
Sleep(10000);
int input;
cin >> input;
}
您会注意到,当您键入字符时,即使没有调用 cin
,您的按键操作也会被存储。
现在想象一下,当您按下按键而不使用 `cin' 处理它们时会发生什么。他们将留在缓冲区。你应该避免这种情况。但是您可以使用我上面提到的代码在开始之前清除控制台缓冲区(下面的示例):
#include "windows.h"
#include "iostream"
using namespace std;
void ClearConsoleInputBuffer()
{
PINPUT_RECORD ClearingVar1 = new INPUT_RECORD[256];
DWORD ClearingVar2;
ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE),ClearingVar1,256,&ClearingVar2);
delete[] ClearingVar1;
}
int main()
{
cout << "write something";
Sleep(3000);
ClearConsoleInputBuffer();
int a;
cin >> a;
}
关于c++ - 删除按键历史(GetKeyState)C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20222277/
我希望在按下某个键时切换 bool 事件。具体来说,'s' 键。我已被指向函数 GetKeyState(),它应该在 Win32 API 下工作。我知道字母's'的ASCII码是115,所以我的代码如
我需要为我的小应用程序监听键盘按键状态。 #include #include #include using namespace std; int main() { while(1)
在VCL(Delphi 2010)中我使用这个函数来检查控制键是否被按下: function IsControlKeyPressed: Boolean; begin Result := GetKe
使用 GetKeyState,我可以在按下某个键时执行一些任务。但是,如果我有 if (GetKeyState(VK_UP) & 0x80),它会在整个按住键的过程中返回 true。 如果我只想在按下
大家好,我正在使用 C 中的代码块。我阅读了 https://msdn.microsoft.com/en-us/library/windows/desktop/ms646301(v=vs.85).as
当我使用 GetKeyState 或 GetAsyncKeyState 按下某些键时,我遇到了问题,两者都记录了按下键的历史记录。所以当我有一个 cin>> 这是我按下的键。 if(GetKeySta
我编写了一个简单的程序来监听大写锁定键,并显示一个消息框,说明当前大写锁定是打开还是关闭。 所以:用户按下大写锁定,程序确定大写锁定现在处于什么状态(打开或关闭)并显示一个消息框。 实际发生的是,当大
有时我会收到客户的错误报告,但我无法解释。在 Delphi 中的 Application.Run() 之后,我收到以下错误: EOSError: System error: Code:_5 Acce
Keyboard.GetKeyStates 似乎有一种方法可以返回错误按下的键,例如 Keyboard.GetKeyStates(Key.NumPad2) 可以返回 向下,切换,即使没有按下也是如此。
从MSDN ,我了解到GetKeyState 与当前线程的消息队列相关联。 然后我创建了两个示例应用程序:KeyPresser 和 BackChecker。 我在 KeyPresser 中按下一个键,
我正在使用 C# 开发一个简单的通用 Windows 应用程序。我有一个 RichEditBox,并且在使用 Control+I 组合键时发现了奇怪的行为,由于某种原因,它会插入一个 Tab(这是预期
我正在使用 C# 开发一个简单的通用 Windows 应用程序。我有一个 RichEditBox,并且在使用 Control+I 组合键时发现了奇怪的行为,由于某种原因,它会插入一个 Tab(这是预期
在下面的代码中:- BYTE ks[256]; auto keyboard_layout = GetKeyboardLayout(0); GetKeyboardState(ks); auto w =
与获得按键有什么区别: GetKeyState() GetAsyncKeyState() getch()? 我应该什么时候使用一个而不是另一个? 最佳答案 GetKeyState() 和 GetAsy
#include int main() { if ( !GetKeyState(VK_CAPITAL) & 1 ) { printf("caps off"); } else printf("caps
基本上, 它的灵感来自 Vim 我想使用一个键(例如 Alt、F1)组合(+I J K L)来映射到箭头键 Autohotkey 中已经完成的工作 Ralt & j::send{Left} Ralt
我是一名优秀的程序员,十分优秀!