当前位置:C++技术网 > 精选软件 > 如何拦截和屏蔽F1到F12功能键(实现F10菜单功能键的拦截和屏蔽)

如何拦截和屏蔽F1到F12功能键(实现F10菜单功能键的拦截和屏蔽)

更新时间:2016-01-06 16:13:05浏览次数:1+次

    我们这里使用Win32是实现F1到F12一系列的按键的拦截或者屏蔽,包括F10这个系统按键。对于除了F10按键外的所有按键,很多人都会拦截和屏蔽,然而对于F10却无可奈何。实际上却很简单,无奈的是基本上大家对基础知识都不在乎,然后在这些基本功能上总是被绊倒,说来也是很无奈!

    如果说只是提供实现代码,那真的是不知道写一篇文章。我在此只是想提醒广大的程序员朋友,重视基础知识,不然还要浪费不少时间!

键盘上的F10菜单功能键

【键盘上的F10菜单功能键】
    系统的F1到F12的十二个按键之中,F10这个按键比较特别。F10按键已经被御用了,被当做了系统按键。而其他十一个按键,都是普通的按键。如果你只是使用普通方法去拦截和屏蔽F10,是不是太不把F10当做一回事了。人家是何等身份,就用对待普通F键的方式就搞定了,那还叫什么系统按键!
    普通的按键的拦截和屏蔽,都可以通过WM_KEYDOWN消息即可做到。通过获取wParam参数中的虚拟键码,比对一下即可。如果是对应的按键按下,你只需要返回0即(return 0;)即可实现屏蔽。而在返回之前,你执行的代码,就可以由你定。那么这样你就可以定制你自己的F系列按键的功能了。只要你返回0,系统就认为你已经处理好了这个按键的响应,系统就不再处理了。
    然而F10属于系统键,所以通过WM_KEYDOWN是得不到这个键的处理过程的。按下F10键,触发的消息根本就不是WM_KEYDOWN,有些人却苦苦在这个消息里把代码改来改去。
    既然是系统键,走的自然是系统键的通道。其实就是WM_SYSKEYDOWN这个消息。然后你通过虚拟键码来拦截屏蔽即处理这个按键的消息即可。这样你就轻松屏蔽了F10按键。
    当然,你在WM_SYSKEYDOWN中处理非F10的F系列的按键,那也是没有用的。道理是想通的,不同身份的人走的通道是不一样的,所以只有在正确的通道拦截对应的消息才奏效。
    由此,F10的拦截和屏蔽,真是分分钟的事情,然而一直困扰着大量的程序员!我也是学了这些基础知识之后,才越来越明白,基础真的很重要!
    下面是拦截屏蔽F1-F12以及屏蔽F10的代码:
case WM_SYSKEYDOWN:
    switch(wParam)
    {
    case VK_F10://无法拦截
        MessageBox(hwnd,_T("F10"),_T(""),0);
        return 0;
    }
case WM_KEYDOWN:
    case VK_F1:
    case VK_F2:
    case VK_F3:
    case VK_F4:
    case VK_F5:
    case VK_F6:
    case VK_F7:
    case VK_F8:
    case VK_F9:
    case VK_F11:
    case VK_F12:
    return 0;
    明白了吗?不管是win32还是MFC还是QT,在Windows上,就只要这样处理两个消息就拦截了。至于不同的类库提供不同的方式来实现,最终都是这样处理的。