• 系统消息 键鼠消息


    鼠标消息

    在窗口显示区域鼠标消息

    WM_MOUSEMOVE 当鼠标在窗口的显示区域移动时
    WM_LBUTTONDOWN 按下鼠标左键
    WM_LBUTTONUP 释放鼠标左键
    WM_LBUTTONDBLCLK 双击鼠标左键
    WM_MBUTTONDOWN 按下鼠标中键
    WM_MBUTTONUP 释放鼠标中键
    WM_MBUTTONDBLCLK 双击鼠标中键
    WM_RBUTTONDOWN 按下鼠标右键
    WM_RBUTTONUP 释放鼠标右键
    WM_RBUTTONDBLCLK 双击鼠标右键
    wParam为鼠标按键以及Shift和Ctrl键的状态
    lParam为鼠标的显示区域x坐标y坐标(高字节为x,低字节为y)
    WM_NCHITTEST 鼠标命中测试
    Windows根据它来产生与鼠标位置相关的所有其它鼠标消息
    wParam unused
    lParam 屏幕坐标x,y
    WM_MOUSEWHEEL 鼠标滚轮转动
    wParam的低字组包含一系列的旗标,用于表示鼠标按键、Shift与Ctrl键的状态。
    wParam的高字组保存一个「delta」值,该值目前可以是120或-120,向前转动或向后转动。值120或-120表示文件将分别向上或向下卷动三行。
    lParam为鼠标的屏幕坐标
    显示区域鼠标消息和显示区域鼠标消息wParam 的位屏蔽有
    MK_LBUTTON按下左键
    MK_MBUTTON按下中键
    MK_RBUTTON按下右键
    MK_SHIFT按下Shift键
    MK_CONTROL按下Ctrl键

    在窗口非显示区域鼠标消息

    WM_NCMOUSEMOVE 当鼠标在窗口的显示区域移动时
    WM_NCLBUTTONDOWN 按下鼠标左键
    WM_NCLBUTTONUP 释放鼠标左键
    WM_NCLBUTTONDBLCLK 双击鼠标左键
    WM_NCMBUTTONDOWN 按下鼠标中键
    WM_NCMBUTTONUP 释放鼠标中键
    WM_NCMBUTTONDBLCLK 双击鼠标中键
    WM_NCRBUTTONDOWN 按下鼠标右键
    WM_NCRBUTTONUP 释放鼠标右键
    WM_NCRBUTTONDBLCLK 双击鼠标右键
    wParam命中的区域 
    lParam为鼠标的显示区域x坐标+y坐标

    键盘消息 

    虚拟码

    虚拟键码 对应键
    VK_LBUTTON 1 Left mouse button
    VK_RBUTTON 2 Right mouse button
    VK_CANCEL 3 Control-break processing
    VK_MBUTTON 4 Middle mouse button (three-button mouse)
    VK_XBUTTON1 5 Windows 2000/XP: X1 mouse button
    VK_XBUTTON2 6 Windows 2000/XP: X2 mouse button
    VK_BACK 8 Backspace
    VK_TAB 9 Tab
    VK_CLEAR 12 Clear
    VK_RETURN 13 Enter
    VK_SHIFT 16 Shift
    VK_CONTROL 17 Ctrl
    VK_MENU 18 Alt
    VK_PAUSE 19 Pause
    VK_CAPITAL 20 Caps Lock
    VK_KANA 21 IME Hanguel mode (maintained for compatibility; use VK_HANGUL)
    VK_HANGUL 21 IME Hangul mode
    VK_JUNJA 23 IME Junja mode
    VK_FINAL 24 IME final mode
    VK_HANJA 25 IME Hanja mode
    VK_KANJI 25* IME Kanji mode
    VK_ESCAPE 27 Esc
    VK_CONVERT 28 IME convert
    VK_NONCONVERT 29 IME nonconvert
    VK_ACCEPT 30 IME accept
    VK_MODECHANGE 31 IME mode change request
    VK_SPACE 32 Space
    VK_PRIOR 33 Page Up
    VK_NEXT 34 Page Down
    VK_END 35 End
    VK_HOME 36 Home
    VK_LEFT 37 Left Arrow
    VK_UP 38 Up Arrow
    VK_RIGHT 39 Right Arrow
    VK_DOWN 40 Down Arrow
    VK_SELECT 41 Select
    VK_PRINT 42 Print
    VK_EXECUTE 43 Execute
    VK_SNAPSHOT 44 Snapshot
    VK_INSERT 45 Insert
    VK_DELETE 46 Delete
    VK_HELP 47 Help
      48 0
      49 1
      50 2
      51 3
      52 4
      53 5
      54 6
      55 7
      56 8
      57 9
      65 A
      66 B
      67 C
      68 D
      69 E
      70 F
      71 G
      72 H
      73 I
      74 J
      75 K
      76 L
      77 M
      78 N
      79 O
      80 P
      81 Q
      82 R
      83 S
      84 T
      85 U
      86 V
      87 W
      88 X
      89 Y
      90 Z
    VK_LWIN 91 leftWindows key
    VK_RWIN 92 rightWindows key
    VK_APPS 93 Applications key
    VK_SLEEP 95 Computer Sleep key
    VK_NUMPAD0 96 Numeric keypad 0
    VK_NUMPAD1 97 Numeric keypad 1
    VK_NUMPAD2 98 Numeric keypad 2
    VK_NUMPAD3 99 Numeric keypad 3
    VK_NUMPAD4 100 Numeric keypad 4
    VK_NUMPAD5 101 Numeric keypad 5
    VK_NUMPAD6 102 Numeric keypad 6
    VK_NUMPAD7 103 Numeric keypad 7
    VK_NUMPAD8 104 Numeric keypad 8
    VK_NUMPAD9 105 Numeric keypad 9
    VK_MULTIPLY 106 Numeric keypad *
    VK_ADD 107 Numeric keypad +
    VK_SEPARATOR 108 Numeric keypad Enter
    VK_SUBTRACT 109 Numeric keypad -
    VK_DECIMAL 110 Numeric keypad .
    VK_DIVIDE 111 Numeric keypad /
    VK_F1 112 F1
    VK_F2 113 F2
    VK_F3 114 F3
    VK_F4 115 F4
    VK_F5 116 F5
    VK_F6 117 F6
    VK_F7 118 F7
    VK_F8 119 F8
    VK_F9 120 F9
    VK_F10 121 F10
    VK_F11 122 F11
    VK_F12 123 F12
    VK_F13 124 F13
    VK_F14 125 F14
    VK_F15 126 F15
    VK_F16 127 F16
    VK_F17 128 F17
    VK_F18 129 F18
    VK_F19 130 F19
    VK_F20 131 F20
    VK_F21 132 F21
    VK_F22 133 F22
    VK_F23 134 F23
    VK_F24 135 F24
    VK_NUMLOCK 144 Num Lock
    VK_SCROLL 145 Scroll
    VK_LSHIFT 160 left shift key
    VK_RSHIFT 161 right shift key
    VK_LCONTROL 162 left ctrl key
    VK_RCONTROL 163 right ctrl key
    VK_LMENU 164 left alt key
    VK_RMENU 165 right alt key
    VK_BROWSER_BACK 166 Windows 2000/XP: Browser Back key
    VK_BROWSER_FORWARD 167 Windows 2000/XP: Browser Forward key
    VK_BROWSER_REFRESH 168 Windows 2000/XP: Browser Refresh key
    VK_BROWSER_STOP 169 Windows 2000/XP: Browser Stop key
    VK_BROWSER_SEARCH 170 Windows 2000/XP: Browser Search key
    VK_BROWSER_FAVORITES 171 Windows 2000/XP: Browser Favorites key
    VK_BROWSER_HOME 172 Windows 2000/XP: Browser Start and Home key
    VK_VOLUME_MUTE 173 Windows 2000/XP: Volume Mute key
    VK_VOLUME_DOWN 174 Windows 2000/XP: Volume Down key
    VK_VOLUME_UP 175 Windows 2000/XP: Volume Up key
    VK_MEDIA_NEXT_TRACK 176 Windows 2000/XP: Next Track key
    VK_MEDIA_PREV_TRACK 177 Windows 2000/XP: Previous Track key
    VK_MEDIA_STOP 178 Windows 2000/XP: Stop Media key
    VK_MEDIA_PLAY_PAUSE 179 Windows 2000/XP: Play/Pause Media key
    VK_LAUNCH_MAIL 180 Windows 2000/XP: Start Mail key
    VK_LAUNCH_MEDIA_SELECT 181 Windows 2000/XP: Select Media key
    VK_LAUNCH_APP1 182 Windows 2000/XP: Start Application 1 key
    VK_LAUNCH_APP2 183 Windows 2000/XP: Start Application 2 key
    VK_OEM_1 186 ; :
    VK_OEM_PLUS 187 = +
    VK_OEM_COMMA 188
    VK_OEM_MINUS 189 - _
    VK_OEM_PERIOD 190
    VK_OEM_2 191 / ?
    VK_OEM_3 192 ` ~
    VK_OEM_4 219 [ {
    VK_OEM_5 220 \ |
    VK_OEM_6 221 ] }
    VK_OEM_7 222 ' "
    VK_OEM_8 223 Used for miscellaneous characters; it can vary by keyboard.
    VK_OEM_102 226 Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard
    VK_PACKET 231 Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. The 
    VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. 
    For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and
     WM_KEYUP
    VK_PROCESSKEY 229 Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
    VK_ATTN 246 Attn key
    VK_CRSEL 247 CrSel key
    VK_EXSEL 248 ExSel key
    VK_EREOF 249 Erase EOF key
    VK_PLAY 250 Play key
    VK_ZOOM 251 Zoom key
    VK_NONAME 252 Reserved
    VK_PA1 253 PA1 key
    VK_OEM_CLEAR 254 Clear key

    关于键盘消息的一些相关概念 

    扫描码和虚拟码

    • 扫描码对应着键盘上的不同键,每一个键被按下或释放时,都会产生一个唯一的扫描码作为本身的标识
    • 扫描码依赖于具体的硬件设备,即当相同的键被按下或释放时,在不同的机器上可能产生不同的扫描码
    • 在程序中通常使用由Windows系统定义的与具体设备无关的虚拟码.在击键产生扫描码的同时,键盘驱动程序KEYBOARD.DRV截取键的扫描码,然后将其翻译成对应的虚拟码,再将扫描码和虚拟码一齐编码形成键盘消息
    • ASCII值对应着字符,而虚拟键代码是对应着键.例如字符A和a的ASCII值不同,但由于位于同一个键上,因此虚拟键代码相同
    • 最后发送到消息队列的键盘消息中,既包含了扫描码又包含了虚拟码

    输入焦点

    • 同一时刻,Windows中可能有多个不同程序在运行.这时,键盘由多个窗口共享,但只有一个窗口能够接收到键盘消息,这个能够接收键盘消息的窗口被称为拥有输入焦点的窗口
    • 拥有输入焦点的窗口应该是当前的活动窗口,或者是活动窗口的子窗口,其标题和边框会以高亮度显示,以区别于其他窗口.拥有输入焦点的也可以是图标而不是窗口,此时,Windows也将消息发送给图标,只是消息的格式略有不同
    • 窗口过程可以通过发送WM_SETFOCUS和 WM_KILLFOCUS消息使窗体获得或失去输入焦点.程序也可以通过捕获WM_SETFOCUS和WM_KILLFOCUS消息来判断窗体何时获得或失去输入焦点.其中WM_SETFOCUS消息表示窗口正获得输入焦点,WM_ KILLFOCUS消息表示窗口正失去输入焦点

      注意:每当用户按下或释放某一个键时,会产生一个中断,该中断激活键盘驱动程序KEYBOARD.DRV来对键盘中断进行处理.KEYBOARD.DRV程序会根据用户的不同操作进行编码,然后调用Windows用户模块USER.EXE生成键盘消息,并将该消息发送到消息队列中等候处理  

    系统键消息 系统键消息指由Aft键和其他键组合而产生的按键消息.当系统键被按下时产生WM_ SYSKEYDOWN消息,当系统键被释放时产生WM_SYSKEYUP消息
    Aft键与其他键形成的组合键通常用于对程序菜单和系统菜单进行选择,或用于在不同的程序之间进行切换.因此,系统键消息应该交由Windows进行处理,用户所编制的程序一般不处理系统键消息,而是将这些消息交由DefWindowProc函数进行处理.如果用户想对系统键消息进行处理,应该在处理完这些消息后,再将其发送给DefWindowProc函数,使得Windows系统能够正常工作
    非系统键消息 l那些不使用Alt键组合的按键消息

    Windows用8种不同的消息来传递不同的键盘事件

    按键消息

    消息 类型 含义
    WM_SYSKEYDOWN 系统 按下系统按键/组合按键
    WM_SYSKEYUP 系统 松开系统按键/组合按键
    WM_KEYDOWN 非系统 按下按键
    WM_KEYUP 非系统 松开按键

    字符消息

    消息 类型 含义
    WM_SYSCHAR 系统 系统字符
    WM_SYSDEADCHAR 系统 系统死字符
    WM_CHAR 非系统 字符
    WM_DEADCHAR 非系统 死字符

    注意

    • 其中死字符是由某些特殊键盘上的按键所造成的,Windows一般忽略死字符所产生的消息
    • 某些击键消息可以被转换成字符消息,例如字母键,数字键等.而有些键只能产生按键消息而没有字符消息,例如 Shift键、Insert键等
    • WM_SYSKEYDOWN与WM_SYSKEYUP产生的是WM_SYSCHAR或WM_SYSDEADCHAR
    • WM_KEYDOWN与WM_KEYUP产生的是WM_CHAR或WM_DEADCHAR
    • 消息循环中的 TranslateMessage函数可以实现从击键消息向字符消息的转化.当GetMessage函数捕获一个WM_SYSKEYDOWN消息或WM_KEYDOWN消息后,TranslateMessage函数判断产生该消息的键是否能够被转换成字符消息,如果能,就将该消息转换成字符消息,再通过DispatchMessape函数将转换后的字符消息发送到消息队列中去

    键盘消息MSG结构体变量

    wParam域用于保存按键的虚拟键代码或字符的ASCII码.对于非字符消息,wParam域保存按键的虚拟健代码;对于字符消息,wParam域不保存字符的ASCII码
    lParam域则用于保存击键时产生的附加信息,实际上一个32位的lParam变量被分为六部分,记录了以下相关信息:重复次数、OEM扫描码、扩展键标志、关联键标志、前一击键状态和转换状态
    位数 含义
    重复记数位(0-15) 击键重复次数累加
    OEM扫描码(16-23) OEM扫描码
    扩展键标志位(24) 扩展键标志在有Alt键(或Ctrl)按下时为1,否则为0
    保留位(25-28) 未定义
    关联码(29) 右按键时,假如同时压下ALT键,那么内容代码为1。对WM_SYSKEYUP与WM_SYSKEYDOWN而言,此位总视为1;而对WM_SYSKEYUP与WM_KEYDOW消息而言,此位为0。除了两个之外:
    • 如果活动窗口最小化了,则它没有输入焦点.这时候所有的按键都会产生WM_SYSKEYUP和WM_SYSKEYDOWN消息.如果Alt键未被按下,则内容代码字段被设定为0.Windows使用WM_SYSKEYUP和WM_SYSKEYDOWN消息,从而使最小化了的活动窗口不处理这些按键
    • 对于一些外国语文(非英文)键盘,有些字符是通过Shift、Ctrl或者Alt键与其它键相组合而产生的.这时内容代码为1,但是此消息并非系统按键消息
    键的先前状态(30) 如果在此之前键是释放的,则键的先前状态为0,否则为1。对WM_KEYUP或者WM_SYSKEYUP消息,它总是设定为1;但是对WM_KEYDOWN或者WM_SYSKEYDOWN消息,此位可以为0,也可以为1。如果为1,则表示该键是自动重复功能所产生的第二个或者后续消息 
    转换状态(31) 如果键正被按下,则转换状态为0;如果键正被释放,则转换状态为1。对WM_KEYDOWN或者WM_SYSKEYDOWN消息,此字段为0;对WM_KEYUP或者WM_SYSKEYUP消息,此字段为1 
     

    按键消息的顺序

    WM_KEYDOWN/WM_SYSKEYDOWN

    WM_CHAR/WM_SYSCHAR

    WM_KEYUP/WM_SYSKEYUP

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    例如,按下并释放1键.按下1键所产生的消息和wParam的取值 消息 wParam变量取值 WM_KEYDOWN 虚拟码1 WM_CHAR ASCII码“1” WM_KEYUP 虚拟码1
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    例如,按下Shift键后再按下1键并释放,则依次产生如表所示的消息.按下Shift键后按健所产生的消息和wParam的取值 消息 wParam变量取值 WM_KEYDOWN 虚拟码 VK_SHIFT WM_KEYDOWN 虚拟码 VK_1 WM_CHAR ASCII码 “1” WM_KEYUP 虚拟码 VK_1 WM_KEYUP 虚拟码 VK_SHIFT
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

     

  • 相关阅读:
    The formatter threw an exception while trying to deserialize the message in WCF
    通过Web Deploy方式部署WCF
    The Managed Metadata Service or Connection is currently not available
    How to create Managed Metadata Column
    冒泡算法
    asp.net core 实战项目(一)——ef core的使用
    Vue学习笔记入门篇——安装及常用指令介绍
    Vue学习笔记入门篇——数据及DOM
    Vue学习笔记目录
    Chart.js在Laravel项目中的应用
  • 原文地址:https://www.cnblogs.com/kzang/p/2709813.html
Copyright © 2020-2023  润新知