转自:http://blog.csdn.net/aizquan/article/details/6869806
- 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;
- }
另外,钩子实现请看:http://blog.csdn.net/gamewyd/article/details/6868290