c语言控制台窗口按钮,C语言控制台窗口图形界面编程(七):键盘事件

输入事件中的键盘事件通常有字符事件和按键事件,这些事件的附带信息构成了键盘输入的信息,而想要读取这些信息,是要通过API函数ReadConsoleInput来获取的,函数原型如下: BOOL ReadConsoleInput(//读取输入信息HANDLE hConsoleInput,//句柄PINPUT_RECORD

输入事件中的键盘事件通常有字符事件和按键事件,这些事件的附带信息构成了键盘输入的信息,而想要读取这些信息,是要通过API函数ReadConsoleInput来获取的,函数原型如下:BOOL ReadConsoleInput(

//读取输入信息

HANDLE hConsoleInput,

//句柄

PINPUT_RECORD lpBuffer,

//输入事件结构体的指针

DWORD nLength,

//要读取的记录数

LPDWORD lpNumberOfEventsRead //用来接受成功读取记录数的指针

); //如果该函数成功调用,返回非零值

//输入事件结构体的指针可以是结构体数组的首地址,这样就可以一次性读取多个记录数。

下面介绍几个和读取键盘输入事件有关的结构体,各结构体原型如下:typedef struct _INPUT_RECORD //输入事件结构体

{

WORD EventType; //事件类型

union

{

KEY_EVENT_RECORD

KeyEvent;

//按键事件

MOUSE_EVENT_RECORD

MouseEvent; //鼠标事件

WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;

MENU_EVENT_RECORD

MenuEvent;

FOCUS_EVENT_RECORD

FocusEvent;

} Event; //具体的事件

} INPUT_RECORD;

/*

其中事件类型EventType的值有5种

KEY_EVENT

代表Event包含一个KEY_EVENT_RECODE结构体

MOUSE_EVENT

代表Event包含一个MOUSE_EVENT_RECODE结构体

WINDOW_BUFFER_SIZE_EVENT 代表Event包含一个WINDOW_BUFFER_SIZE_EVENT_RECORD结构体

MENU_EVENT

代表Event包含一个MENU_EVENT_RECORD结构体

FOCUS_EVENT

代表Event包含一个FOCUS_EVENT_RECORD结构体

*/

typedef struct _KEY_EVENT_RECORD //键盘事件结构体

{

BOOL bKeyDown;

//按键状态,true代表键按下,false代表键释放

WORD wRepeatCount;

//按键次数

WORD wVirtualKeyCode;

//虚拟键

WORD wVirtualScanCode;

//虚拟键扫描码

union

{

WCHAR UnicodeChar;

//解释成Unicode宽字符

CHAR AsciiChar;

//解释成ASCII码字符

} uChar;

DWORD dwControlKeyState; //控制键状态

} KEY_EVENT_RECORD;

/*

控制键各状态的值

ENHANCED_KEY

扩展键被按下

LEFT_ALT_PRESSED 左Alt键被按下

LEFT_CTRL_PRESSED 左Ctrl键被按下

RIGHT_ALT_PRESSED 右Alt键被按下

RIGHT_CTRL_PRESSED 右Ctrl键被按下

NUMLOCK_ON

数字锁定被打开

SCROLLLOCK_ON

滚动锁定被打开

CAPSLOCK_ON

大写锁定被打开

SHIFT_PRESSED

Shift键被按下

*/

当输入事件为键盘事件时,事件类型就为键盘事件,为其他事件时,事件类型就为对应的事件。另外,键盘上每个有意义的键都对应着一个唯一的扫描码,虽然扫描码可以作为键的标识,但是它是依赖于具体的设备的。因此,在应用程序中,使用的往往是与具体设备无关的虚拟键代码。这种虚拟键代码是一种与具体设备无关的键盘编码。而控制键状态比如大写锁定开启状态,Ctrl键按下状态等、、、

下面是部分常用虚拟键代码表:/*

虚拟键代码

键名称

-----------------------------------------------------

VK_BACK

0x08

退格键

VK_TAB

0x09

Tab键

VK_RETURN

0x0D

回车键

VK_SHIFT

0x10

Shift键

VK_LSHIFT

0xA0

左Shift键

VK_RSHIFT

0xA1

右Shift键

VK_CONTROL

0x11

Ctrl键

VK_LCONTROL

0xA2

左Ctrl键

VK_RCONTROL

0xA3

右Ctrl键

VK_MENU

0x12

Alt键

VK_LMENU

0xA4

左Alt键

VK_RMENU

0xA5

右Alt键

VK_PAUSE

0x13

Pause键

VK_CAPITAL

0x14

Caps Lock键

VK_NUMLOCK

0x90

Num Lock键

VK_SCROLL

0x91

Scroll Lock键

VK_ESCAPE

0x1B

Esc键

VK_SPACE

0x20

空格键

VK_PRIOR

0x21

Page Up键

VK_NEXT

0x22

Page Down键

VK_END

0x23

End键

VK_HOME

0x24

Home键

VK_LEFT

0x25

左方向键

VK_UP

0x26

上方向键

VK_RIGHT

0x27

右方向键

VK_DOWN

0x28

下方向键

VK_DELETE

0x2E

Delete键

VK_INSERT

0x2D

Insert键

'0'

0x30

0键(非小键盘)

'1'

0x31

1键(非小键盘)

'2'

0x32

2键(非小键盘)

...

...

...

'9'

0x39

9键(非小键盘)

'A'

0x41

A键

'B'

0x42

B键

...

...

...

'Z'

0x5A

Z键

VK_SLEEP

0x5F

Sleep键

VK_NUMPAD0

0x60

小键盘0键

VK_NUMPAD1

0x61

小键盘1键

VK_NUMPAD2

0x62

小键盘2键

...

...

...

VK_NUMPAD9

0x69

小键盘9键

VK_MULTIPLY

0x6A

小键盘乘键*

VK_ADD

0x6B

小键盘加键+

VK_SUBTRACT

0x6D

小键盘减键-

VK_DIVIDE

0x6F

小键盘除键/

VK_DECIMAL

0x6E

小键盘点键.

VK_F1

0x70

F1键

VK_F2

0x71

F2键

...

...

...

VK_F12

0x7B

F12键

VK_F13

0x7C

F13键

注:别问我,我也不知道什么电脑有这么多键

...

...

...

VK_F24

0x87

F24键

VK_OEM_1

0xBA

;:键

VK_OEM_2

0xBF

/?键

VK_OEM_3

0xC0

·~键

VK_OEM_4

0xDB

[{键

VK_OEM_5

0xDC

|键

VK_OEM_6

0xDD

]}键

VK_OEM_7

0xDE

'"键

VK_OEM_PLUS

0xBB

=+键

VK_OEM_MINUS 0xBD

-_键

VK_OEM_COMMA 0xBC

,

VK_OEM_PERIOD 0xBE

.>键

*/

以上是部分常用的微软虚拟键盘码表,,想要知道更详细的,请参见MSDN。其中各个虚拟键的具体使用情况根据各人编译器或IDE等的不同而有所差异。下面是一个实现按Esc键就输出Esc的样例程序:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值