use*_*687 2 c++ windows winapi
我在网上找到了这段代码:
CHAR getch() {
DWORD mode, cc;
HANDLE h = GetStdHandle( STD_INPUT_HANDLE );
if (h == NULL) {
return 0; // console not found
}
GetConsoleMode( h, &mode );
SetConsoleMode( h, mode & ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT) );
TCHAR c = 0;
ReadConsole( h, &c, 1, &cc, NULL );
SetConsoleMode( h, mode );
return c;
}
Run Code Online (Sandbox Code Playgroud)
使用它像:
while(1) {
TCHAR key = getch();
}
Run Code Online (Sandbox Code Playgroud)
我能够获得数字,字母甚至返回按键.但我无法逃脱或其他功能键如控制,alt.是否可以修改它以检测这些键?
如果像控制和alt键之类的东西,这些是虚拟键击,它们是角色的补充.你需要使用ReadConsoleInput.但你会得到它,鼠标也是.所以你真的需要从调用中过滤并返回一个结构,这样你才能知道它是否类似于ctrl-A Alt-A.如果您不想要它们,请重复过滤.
这可能需要工作,不知道你是什么...
bool getconchar( KEY_EVENT_RECORD& krec )
{
DWORD cc;
INPUT_RECORD irec;
HANDLE h = GetStdHandle( STD_INPUT_HANDLE );
if (h == NULL)
{
return false; // console not found
}
for( ; ; )
{
ReadConsoleInput( h, &irec, 1, &cc );
if( irec.EventType == KEY_EVENT
&& ((KEY_EVENT_RECORD&)irec.Event).bKeyDown
)//&& ! ((KEY_EVENT_RECORD&)irec.Event).wRepeatCount )
{
krec= (KEY_EVENT_RECORD&)irec.Event;
return true;
}
}
return false; //future ????
}
int main( )
{
KEY_EVENT_RECORD key;
for( ; ; )
{
getconchar( key );
std::cout << "key: " << key.uChar.AsciiChar
<< " code: " << key.wVirtualKeyCode << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6253 次 |
| 最近记录: |