Win32命令行应用,+ReadConsoleInput()得到键盘VK_CODE
来源:互联网 发布:数据采集系统作用 编辑:程序博客网 时间:2024/05/12 20:27
BOOL ReadConsoleInput( HANDLE hConsoleInput, //输入句柄 PINPUT_RECORD lpBuffer, //指向INPUT_RECORD结构体(数组)的指针 DWORD nLength, //上面那个结构体的大小 LPDWORD lpNumberOfEventsRead //实际读入输入内容的个数);
#pragma once#include <Windows.h>class GohanConsoleHelper{ HANDLE _hIn; HANDLE _hOut; INPUT_RECORD _InRec; DWORD _NumRead;public: WORD VKey; GohanConsoleHelper(void){ _hIn = GetStdHandle(STD_INPUT_HANDLE); _hOut = GetStdHandle(STD_OUTPUT_HANDLE); VKey=0; } bool ReadOneInput() { return 0!=ReadConsoleInput(_hIn,&_InRec,1,&_NumRead); } bool ReadOneInput(INPUT_RECORD& InRec) { return 0!=ReadConsoleInput(_hIn,&InRec,1,&_NumRead); } DWORD ReadKeyDown() { if(!ReadConsoleInput(_hIn,&_InRec,1,&_NumRead)) return 0; if(_InRec.EventType!=KEY_EVENT) return 0; if(_InRec.Event.KeyEvent.bKeyDown > 0) return 0; VKey = _InRec.Event.KeyEvent.wVirtualKeyCode; return VKey; } DWORD ReadKeyPush() { if(!ReadConsoleInput(_hIn,&_InRec,1,&_NumRead)) return 0; if(_InRec.EventType!=KEY_EVENT) return 0; if(_InRec.Event.KeyEvent.bKeyDown == 0) return 0; VKey = _InRec.Event.KeyEvent.wVirtualKeyCode; return VKey; }public: ~GohanConsoleHelper(void){}};
#include <windows.h>#include <iostream>#include "GohanConsoleHelper.h"using namespace std;int main(){ GohanConsoleHelper gch; while (true) { if(gch.ReadKeyPush()!=0) //使用ReadKeyDown()捕获按键弹起的VK_CODE { if(gch.VKey != VK_ESCAPE) cout<<"VK_CODE == "<<gch.VKey<<endl; else { cout<<"Bye~~"<<endl; break; } } } return 0;}