虚拟键码和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

相关文章

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

线性因子模型 - 独立分量分析(ICA)篇

序言 线性因子模型是数据分析与机器学习中的一类重要模型,它们通过引入潜变量( latent variables \text{latent variables} latent variables)来更好地表征数据。其中,独立分量分析( ICA \text{ICA} ICA)作为线性因子模型的一种,以其独特的视角和广泛的应用领域而备受关注。 ICA \text{ICA} ICA旨在将观察到的复杂信号

【软考】希尔排序算法分析

目录 1. c代码2. 运行截图3. 运行解析 1. c代码 #include <stdio.h>#include <stdlib.h> void shellSort(int data[], int n){// 划分的数组,例如8个数则为[4, 2, 1]int *delta;int k;// i控制delta的轮次int i;// 临时变量,换值int temp;in

三相直流无刷电机(BLDC)控制算法实现:BLDC有感启动算法思路分析

一枚从事路径规划算法、运动控制算法、BLDC/FOC电机控制算法、工控、物联网工程师,爱吃土豆。如有需要技术交流或者需要方案帮助、需求:以下为联系方式—V 方案1:通过霍尔传感器IO中断触发换相 1.1 整体执行思路 霍尔传感器U、V、W三相通过IO+EXIT中断的方式进行霍尔传感器数据的读取。将IO口配置为上升沿+下降沿中断触发的方式。当霍尔传感器信号发生发生信号的变化就会触发中断在中断

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit 在 Windows 上部署 gitblit 缘起gitblit 是什么安装JDK部署 gitblit 下载 gitblit 并解压配置登录注册为 windows 服务 修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc 缘起

Windows如何添加右键新建菜单

Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单实验环境缘起以新建`.md`文件为例第一步第二步第三步 总结 实验环境 Windows7 缘起 因为我习惯用 Markdown 格式写文本,每次新建一个.txt后都要手动修改为.md,真的麻烦。如何在右键新建菜单中添加.md选项呢? 网上有很多方法,这些方法我都尝试了,要么太麻烦,要么不凑效

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除