您的位置:首页 > 编程语言 > C语言/C++

C++控制台程序,windows环境下响应按键消息实现一

2014-01-25 17:39 423 查看
转自:http://blog.csdn.net/aizquan/article/details/6869806

[cpp] view
plaincopy

BOOL ReadConsoleInput(

HANDLE hConsoleInput, //输入句柄

PINPUT_RECORD lpBuffer, //指向INPUT_RECORD结构体(数组)的指针

DWORD nLength, //上面那个结构体的大小

LPDWORD lpNumberOfEventsRead //实际读入输入内容的个数

);

[cpp] view
plaincopy

#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){}

};

[cpp] view
plaincopy

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: