当前位置:C++技术网 > 精选软件 > 系统键有哪些,如何屏蔽Alt键

系统键有哪些,如何屏蔽Alt键

更新时间:2016-01-06 19:21:55浏览次数:1+次

    系统键就是系统御用的按键,供系统优先完成一些功能的按键,和普通的按键有所不同。系统按键的按下消息处理是在WM_SYSKEYDOWN处理的。系统的消息处理,在消息名称前含有SYS字样。
    在学习过程中,我总想搞清楚系统键到底有哪些。然而网上搜不到相关资料,MSDN中似乎说的是F10和Alt键。不过,感觉这个答案还是不是最准确的。
    所以,就亲自用代码来验证一下即可。如果是系统键,则系统会优先处理。而系统要处理系统键,则在WM_SYSKEYDOWN消息中进行。而普通的按键,则在WM_KEYDOWN中进行。所以,我们来分别测试一下,将我们可能以为的按键来测试一番。
    我们在文章《如何拦截和屏蔽F1到F12功能键(实现F10菜单功能键的拦截和屏蔽) 》已经得知,F10是系统键。如果屏蔽F也在文中分析了。
    我们测试的其他的按键是否为系统键的方法也很简单,就是弹出一个消息框,显示对应的按键的名称。通过判断wParam参数中附带的虚拟键码即可。代码示例如下:
case WM_SYSKEYDOWN://系统键响应的消息
    switch(wParam)
    {
    case VK_F10://F10是系统键,在此拦截
        MessageBox(hwnd,_T("F10"),_T(""),0);
        break;
    case VK_MENU://系统优先
        MessageBox(hwnd,_T("系统Alt键"),_T(""),0);
        break;
    }
    return 0;
case WM_KEYDOWN://普通键响应的消息
    switch(wParam)
    {
    case VK_CONTROL:
         MessageBox(hwnd,_T("Ctrl键"),_T(""),0);
         break;
    case VK_MENU:
         MessageBox(hwnd,_T("应用Alt键"),_T(""),0);
         break;
    }
    return 0;
    我们这里只给出了三个按键的测试代码,给出了代码如何写的例子。键盘的其他按键,你可以自己去补充测试。我已经测试了,发现,只有F10和Alt是经过WM_SYSKEYDOWN处理的。同时,Alt在WM_KEYDOWN消息也会被处理,不过WM_SYSKEYDOWN消息优先处理。系统处理后,就不给WM_KEYDOWN处理了。不过你拦截之后,就可以自己让WM_KEYDOWN消息接着处理。不过这个已经和系统无关了,是你自己的逻辑了。
    也就是说,Alt有双重身份,即使系统键,也是非系统键。只不过系统键的优先级更高。如果你想屏蔽Alt键,就要WM_SYSKEYDOWN中屏蔽。这个和F10的屏蔽是一样的原理。
    那么最后的结论就是,系统键基本上只有两个,即Alt和F10。这两个按键的作用就是激活菜单的,为系统所用。Alt也可以用作普通的按键,可以自己和其他按键组合成快捷键。
    下面是虚拟键码的定义列表:
//鼠标按键左右中键
#define VK_LBUTTON        0x01
#define VK_RBUTTON        0x02
#define VK_MBUTTON        0x04
//常用的按键
#define VK_BACK           0x08//退格键
#define VK_TAB            0x09//Tab键
#define VK_RETURN         0x0D//回车键
#define VK_SHIFT          0x10//Shift键
#define VK_CONTROL        0x11//Ctrl键
#define VK_MENU           0x12//Alt键
#define VK_CAPITAL        0x14//CapsLock大小写锁定键
#define VK_ESCAPE         0x1B//ESC键
//辅助编辑键
#define VK_SPACE          0x20//空格键
#define VK_PRIOR          0x21//PageUp键
#define VK_NEXT           0x22//PageDown键
#define VK_END            0x23//End键
#define VK_HOME           0x24//Home键
#define VK_LEFT           0x25//光标←键
#define VK_UP             0x26//光标↑键
#define VK_RIGHT          0x27//光标→键
#define VK_DOWN           0x28//光标↓键
#define VK_SNAPSHOT       0x2C//截屏快照,将当前屏幕画面以位图形式存入剪切板
#define VK_INSERT         0x2D//插入模式和覆盖模式切换键
#define VK_DELETE         0x2E//Delete键

/* 字母和数字的虚拟键码值就是ASCII编码值
 * VK_0 - VK_9(0x30 - 0x39)
 * VK_A - VK_Z(0x41 - 0x5A)
 */
//Windows徽标键,左右两个键
#define VK_LWIN           0x5B
#define VK_RWIN           0x5C

//数字键盘上的按键
#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_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
//F12之后的是预留的
#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
    以上列出的虚拟键码,我都标注了含义,你可以自行测试是否为系统键。对于这些虚拟键码,删掉了不常用的一些,有的你的键盘上都没有,就没有列举出来了。