虚拟键码和windows消息分析

2024-03-16 16:18

本文主要是介绍虚拟键码和windows消息分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大多数虚拟键码的名称在WINUSER.H表头档案中都定义为以VK_开头。如下

#ifndef NOVIRTUALKEYCODES

 

// begin_r_winuser

 

/*

 *Virtual Keys, Standard Set

 */

#define VK_LBUTTON        0x01

#define VK_RBUTTON        0x02

#define VK_CANCEL         0x03

#define VK_MBUTTON        0x04   /* NOT contiguous with L & RBUTTON */

 

#define VK_BACK           0x08

#define VK_TAB            0x09

 

#define VK_CLEAR          0x0C

#define VK_RETURN         0x0D

 

#define VK_SHIFT          0x10

#define VK_CONTROL        0x11

#define VK_MENU           0x12

#define VK_PAUSE          0x13

#define VK_CAPITAL        0x14

 

#define VK_KANA           0x15

#define VK_HANGEUL        0x15 /* old name - should be here for compatibility */

#define VK_HANGUL         0x15

#define VK_JUNJA          0x17

#define VK_FINAL          0x18

#define VK_HANJA          0x19

#define VK_KANJI          0x19

 

#define VK_ESCAPE         0x1B

 

#define VK_CONVERT        0x1C

#define VK_NONCONVERT     0x1D

#define VK_ACCEPT         0x1E

#define VK_MODECHANGE     0x1F

 

#define VK_SPACE          0x20

#define VK_PRIOR          0x21

#define VK_NEXT           0x22

#define VK_END            0x23

#define VK_HOME           0x24

#define VK_LEFT           0x25

#define VK_UP             0x26

#define VK_RIGHT          0x27

#define VK_DOWN           0x28

#define VK_SELECT         0x29

#define VK_PRINT          0x2A

#define VK_EXECUTE        0x2B

#define VK_SNAPSHOT       0x2C

#define VK_INSERT         0x2D

#define VK_DELETE         0x2E

#define VK_HELP           0x2F

 

/* VK_0 thru VK_9 are the same as ASCII '0'thru '9' (0x30 - 0x39) */

/* VK_A thru VK_Z are the same as ASCII 'A'thru 'Z' (0x41 - 0x5A) */

 

#define VK_LWIN           0x5B

#define VK_RWIN           0x5C

#define VK_APPS           0x5D

 

#define VK_NUMPAD0        0x60

#define VK_NUMPAD1        0x61

#define VK_NUMPAD2        0x62

#define VK_NUMPAD3        0x63

#define VK_NUMPAD4        0x64

#define VK_NUMPAD5        0x65

#define VK_NUMPAD6        0x66

#define VK_NUMPAD7        0x67

#define VK_NUMPAD8        0x68

#define VK_NUMPAD9        0x69

#define VK_MULTIPLY       0x6A

#define VK_ADD            0x6B

#define VK_SEPARATOR      0x6C

#define VK_SUBTRACT       0x6D

#define VK_DECIMAL        0x6E

#define VK_DIVIDE         0x6F

#define VK_F1             0x70

#define VK_F2             0x71

#define VK_F3             0x72

#define VK_F4             0x73

#define VK_F5             0x74

#define VK_F6             0x75

#define VK_F7             0x76

#define VK_F8             0x77

#define VK_F9             0x78

#define VK_F10            0x79

#define VK_F11            0x7A

#define VK_F12            0x7B

#define VK_F13            0x7C

#define VK_F14            0x7D

#define VK_F15            0x7E

#define VK_F16            0x7F

#define VK_F17            0x80

#define VK_F18            0x81

#define VK_F19            0x82

#define VK_F20            0x83

#define VK_F21            0x84

#define VK_F22            0x85

#define VK_F23            0x86

#define VK_F24            0x87

 

#define VK_NUMLOCK        0x90

#define VK_SCROLL         0x91

 

/*

 *VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys.

 *Used only as parameters to GetAsyncKeyState() and GetKeyState().

 * Noother API or message will distinguish left and right keys in this way.

 */

#define VK_LSHIFT         0xA0

#define VK_RSHIFT         0xA1

#define VK_LCONTROL       0xA2

#define VK_RCONTROL       0xA3

#define VK_LMENU          0xA4

#define VK_RMENU          0xA5

 

#if(WINVER >= 0x0400)

#define VK_PROCESSKEY     0xE5

#endif /* WINVER >= 0x0400 */

 

#define VK_ATTN           0xF6

#define VK_CRSEL          0xF7

#define VK_EXSEL          0xF8

#define VK_EREOF          0xF9

#define VK_PLAY           0xFA

#define VK_ZOOM           0xFB

#define VK_NONAME         0xFC

#define VK_PA1            0xFD

#define VK_OEM_CLEAR      0xFE

 

// end_r_winuser

 

#endif /* !NOVIRTUALKEYCODES */


windows消息的分类:

1 WM_PAINT消息

LOWORD(lParam)是客户区的宽,HIWORD(lParam)是客户区的高

2 滚动条WM_VSCROLLWM_HSCROLL消息

LOWORD(wParam)指出了鼠标对滚动条的操作。比如上、下、左、右、翻页、移动等。 

3 击键消息,有WM_SYSKEYDOWNWM_SYSKEYUPWM_KEYUPWM_KEYDOWN

其中wParam是虚拟键代码,lParam是包含属于击键的其他信息。lParam消息参数分为7个域,下图进行详细说明。 

4 字符消息WM_CHARWM_DEADCHARWM_SYSCHARWM_SYSDEADCHAR

lParam消息参数跟击键消息的lParam消息参数内容相同,wParam参数是ANSIUnicode字符代码 

5 客户区鼠标消息WM_LBUTTONDOWNWM_LBUTTONUPWM_RBUTTONDOWNWM_RBUTTONUPWM_MBUTTONDOWNWM_MBUTTONUP

lParam参数的低位是鼠标的客户区x坐标,高位是客户区y坐标。wParam参数是指示鼠标键及ShiftCtrl键的状态。wParam&MK_SHIFTMK_CTRL,如果返回TRUE就意味着有按下ShiftCtrl键。

6 非客户区消息

wParam参数指明移动或者单击鼠标键的非客户区位置,以HT开头,lParam参数低位指出了鼠标所在屏幕坐标的x坐标,高位指出了鼠标所在屏幕坐标的y坐标。

7 鼠标轮滚动消息,WM_MOUSEWHEEL消息

lParam将获得鼠标的屏幕位置(坐标),wParam参数的低位表明鼠标键和ShiftCtrl键的状态。HIWORD(wParam)值可正可负,指出了滚轮导致屏幕滚动几行,是WHEEL_DELTA(120)的倍数

8 计时器消息WM_TIMER

wParam参数等于计时器的ID值,lParam0

9 按钮子窗口的WM_COMMAND消息

wParam参数的低位是子窗口ID,高位是通知码, lParam参数是子窗口句柄。

10 焦点消息,对于正在失去焦点的窗口,会收到WM_KILLFOCUS消息

其wParam参数是即将接收输入焦点的窗口的句柄。对于即将获取焦点的窗口,会收到WM_SETFOCUS消息,其wParam参数是正在失去焦点的窗口的句柄。

11 编辑控制的WM_COMMAND消息

wParam参数的低位是子窗口ID,高位是通知码,lParam参数是子窗口句柄。

12 列表框的WM_COMMAND消息

wParam参数的低位是子窗口ID,高位是通知码,lParam参数是子窗口句柄。

13 菜单消息1,WM_INITMENU

wParam是主菜单句柄,lParam是0.

14 菜单消息2,WM_MENUSELECT,菜单跟踪消息

其wParam参数的低位是选中项菜单的ID或者弹出式菜单的句柄,高位是选择标识,lParam参数是包含选中项的菜单句柄。

15 菜单消息3,WM_INITMENUPOPUP,准备显示一个弹出式菜单时产生的消息

wParam参数是弹出式菜单的句柄,lParam的低位是弹出式菜单的索引,如果该菜单是系统菜单,那么高位是1,否则为0.

16 菜单消息4,WM_COMMAND,选中菜单后产生

wParam低位是击中菜单的ID,高位是0,lParam参数也是0



当一个非系统键被按下时该消息发送给具有键盘焦点的窗口。非系统键即不与ALT联用的情况。

wParam为虚拟键码:WM_KEYDOWN

  lParam 的定义如下:



这篇关于虚拟键码和windows消息分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/816014

相关文章

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

MyBatis-Plus中静态工具Db的多种用法及实例分析

《MyBatis-Plus中静态工具Db的多种用法及实例分析》本文将详细讲解MyBatis-Plus中静态工具Db的各种用法,并结合具体案例进行演示和说明,具有很好的参考价值,希望对大家有所帮助,如有... 目录MyBATis-Plus中静态工具Db的多种用法及实例案例背景使用静态工具Db进行数据库操作插入

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使

Windows server服务器使用blat命令行发送邮件

《Windowsserver服务器使用blat命令行发送邮件》在linux平台的命令行下可以使用mail命令来发送邮件,windows平台没有内置的命令,但可以使用开源的blat,其官方主页为ht... 目录下载blatBAT命令行示例备注总结在linux平台的命令行下可以使用mail命令来发送邮件,Win

Windows环境下安装达梦数据库的完整步骤

《Windows环境下安装达梦数据库的完整步骤》达梦数据库的安装大致分为Windows和Linux版本,本文将以dm8企业版Windows_64位环境为例,为大家介绍一下达梦数据库的具体安装步骤吧... 目录环境介绍1 下载解压安装包2 根据安装手册安装2.1 选择语言 时区2.2 安装向导2.3 接受协议

jdk21下载、安装详细教程(Windows、Linux、macOS)

《jdk21下载、安装详细教程(Windows、Linux、macOS)》本文介绍了OpenJDK21的下载地址和安装步骤,包括Windows、Linux和macOS平台,下载后解压并设置环境变量,最... 目录1、官网2、下载openjdk3、安装4、验证1、官网官网地址:OpenJDK下载地址:Ar

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring