none
关于按键消息的LParam 现在是64位的,最后16位应该是按键的次数,前边的32位总是0xFFFFFFFF,另外16位按键后不相同,高手进来看看! RRS feed

  • 问题

  • 我截取消息看了很久了
    没发现和wParam有必然的联系,
    从0开始的索引,下面就是查到的那16位的资料
    16-23  8-Bit OEM Scan Code ( 8位OEM 扫描码)
    24         Extended Key Flag
    25-28    没有指出
    29        Context Code
    30        Previous Key State
    31         Transition State

    现在的问题是 我要是自己发送按键消息 这个LParam的资料从哪里找啊
    比较笨的方法  是自己按一遍键盘,逐个记录LParam 做成表格,但不适合我在程序里 灵活的使用
    希望高手指点指点,给点资料
    • 已编辑 胖胖亮 2009年5月25日 14:58
    • 已移动 Sheng Jiang 蒋晟Moderator 2009年5月25日 15:40 Windows API问题 ([Loc]From:Visual C#)
    • 已移动 韦恩卑鄙 waywa 2009年5月26日 4:49 API 还是VC的大大们懂得多 ([Loc]From:.NET Framework 一般性问题讨论区)
    2009年5月25日 14:29

答案

  • 经过我反复的试验  得出惊人的结论 自己发送按键消息时  不用考虑LParam的那些位的设置了  直接设置LParam为0 就可以了
    按键的次数 看来自己用循环语句搞定吧 不用指望 设置LParam了
    • 已标记为答案 胖胖亮 2009年5月26日 12:39
    2009年5月26日 12:39

全部回复

  • 自己发送键盘消息用keybd_event行么?
    Hello world
    2009年5月26日 7:54
    版主
  • WinUser.H中有Virtual Keys列表。直接使用这里面定义的宏
    // 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().
     * No other 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


    麻烦把正确答案设为解答。
    2009年5月26日 11:11
    版主
  • @SplendourG
    谢谢你关注我的问题   但是你给出的wParam的值,我需要的是LParam的值怎么设定
    Best Regards!
    2009年5月26日 12:08
  •  The   WM_KEYDOWN   message   is   posted   to   the   window   with   the   keyboard   focus   when   a   nonsystem   key   is   pressed.   A   nonsystem   key   is   a   key   that   is   pressed   when   the   ALT   key   is   not   pressed.    
       
      A   window   receives   this   message   through   its   WindowProc   function.    
       
      LRESULT   CALLBACK   WindowProc(  
          HWND   hwnd,               //   handle   to   window  
          UINT   uMsg,               //   WM_KEYDOWN  
          WPARAM   wParam,       //   virtual-key   code  
          LPARAM   lParam         //   key   data  
      );  
      Parameters  
      wParam    
      Specifies   the   virtual-key   code   of   the   nonsystem   key.    
      lParam    
      Specifies   the   repeat   count,   scan   code,   extended-key   flag,   context   code,   previous   key-state   flag,   and   transition-state   flag,   as   shown   in   the   following   table.   Value   Description    
      0–15   Specifies   the   repeat   count   for   the   current   message.   The   value   is   the   number   of   times   the   keystroke   is   autorepeated   as   a   result   of   the   user   holding   down   the   key.   If   the   keystroke   is   held   long   enough,   multiple   messages   are   sent.   However,   the   repeat   count   is   not   cumulative.    
      16–23   Specifies   the   scan   code.   The   value   depends   on   the   original   equipment   manufacturer   (OEM).    
      24   Specifies   whether   the   key   is   an   extended   key,   such   as   the   right-hand   ALT   and   CTRL   keys   that   appear   on   an   enhanced   101-   or   102-key   keyboard.   The   value   is   1   if   it   is   an   extended   key;   otherwise,   it   is   0.    
      25–28   Reserved;   do   not   use.    
      29   Specifies   the   context   code.   The   value   is   always   0   for   a   WM_KEYDOWN   message.    
      30   Specifies   the   previous   key   state.   The   value   is   1   if   the   key   is   down   before   the   message   is   sent,   or   it   is   zero   if   the   key   is   up.    
      31   Specifies   the   transition   state.   The   value   is   always   zero   for   a   WM_KEYDOWN   message.    

    麻烦把正确答案设为解答。
    2009年5月26日 12:24
    版主
  • 经过我反复的试验  得出惊人的结论 自己发送按键消息时  不用考虑LParam的那些位的设置了  直接设置LParam为0 就可以了
    按键的次数 看来自己用循环语句搞定吧 不用指望 设置LParam了
    • 已标记为答案 胖胖亮 2009年5月26日 12:39
    2009年5月26日 12:39
  •  The   WM_KEYDOWN   message   is   posted   to   the   window   with   the   keyboard   focus   when   a   nonsystem   key   is   pressed.   A   nonsystem   key   is   a   key   that   is   pressed   when   the   ALT   key   is   not   pressed.    
       
      A   window   receives   this   message   through   its   WindowProc   function.    
       
      LRESULT   CALLBACK   WindowProc(  
          HWND   hwnd,               //   handle   to   window  
          UINT   uMsg,               //   WM_KEYDOWN  
          WPARAM   wParam,       //   virtual-key   code  
          LPARAM   lParam         //   key   data  
      );  
      Parameters  
      wParam    
      Specifies   the   virtual-key   code   of   the   nonsystem   key.    
      lParam    
      Specifies   the   repeat   count,   scan   code,   extended-key   flag,   context   code,   previous   key-state   flag,   and   transition-state   flag,   as   shown   in   the   following   table.   Value   Description    
      0–15   Specifies   the   repeat   count   for   the   current   message.   The   value   is   the   number   of   times   the   keystroke   is   autorepeated   as   a   result   of   the   user   holding   down   the   key.   If   the   keystroke   is   held   long   enough,   multiple   messages   are   sent.   However,   the   repeat   count   is   not   cumulative.    
      16–23   Specifies   the   scan   code.   The   value   depends   on   the   original   equipment   manufacturer   (OEM).    
      24   Specifies   whether   the   key   is   an   extended   key,   such   as   the   right-hand   ALT   and   CTRL   keys   that   appear   on   an   enhanced   101-   or   102-key   keyboard.   The   value   is   1   if   it   is   an   extended   key;   otherwise,   it   is   0.    
      25–28   Reserved;   do   not   use.    
      29   Specifies   the   context   code.   The   value   is   always   0   for   a   WM_KEYDOWN   message.    
      30   Specifies   the   previous   key   state.   The   value   is   1   if   the   key   is   down   before   the   message   is   sent,   or   it   is   zero   if   the   key   is   up.    
      31   Specifies   the   transition   state.   The   value   is   always   zero   for   a   WM_KEYDOWN   message.    

    麻烦把正确答案设为解答。

    很感谢你提供的资料,让我看到了那16位的解释 谢谢
    最开心的是今天有收获,最痛苦的是今天没有收获。
    2009年5月26日 12:56