zoukankan      html  css  js  c++  java
  • (win32)解决虚拟按键被输入法截获(转)

    源博客地址:http://blog.csdn.net/kencaber/article/details/51417871

    响应WM_KEYDOWN消息时发现`~快捷键无效,设置断点发现得到的按键消息根本不是VK_OEM_3 192。由于我观察到输入法是打开的,于是关闭输入法后再试,成功了。继续观察发现,开启输入法时,按下的可能被输入法截获的键全都变成了VK_PROCESSKEY 229。

    可能被截获的键应该包括标点符号(因为有中英文标点之分)、A~Z字母(打字)等等,而方向键、CtrlAlt键等则不会被截获,能被正确识别。

    搜索相关资料,有两种解决办法。第一种是在程序开始运行时关闭输入法,用ImmDisableIME(0)这个函数,具体使用请查阅msdn;第二种解决办法是在PreTranslateMessage中对键码还原。

    [cpp] view plain copy
     
    1. // CMainFrame 消息处理程序  
    2.    
    3. BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)  
    4. {  
    5.     // TODO:  在此添加专用代码和/或调用基类  
    6.     if (pMsg->wParam == VK_PROCESSKEY)  
    7.     {  
    8.         pMsg->wParam = ImmGetVirtualKey(pMsg->hwnd);  
    9.     }  
    10.     return CFrameWnd::PreTranslateMessage(pMsg);  
    11. }  

    使用时记得在MainFrame.cpp中添加

    #include "imm.h"
    #pragma comment(lib, "imm32.lib")

    引用:http://bbs.csdn.net/topics/340266774

    MSDN:ImmGetVirtualKey

  • 相关阅读:
    排序算法---堆排序

    排序算法---希尔排序
    简单排序算法
    Jave 垃圾回收查看工具--jstat
    Linux 查看进程IO状态
    vittualenv 和mkvirtualenv
    服务器被当作了肉机去挖矿的解决办法
    pycharm的函数注释 和 父子组件传递
    git初始化操作
  • 原文地址:https://www.cnblogs.com/happinessday/p/6902718.html
Copyright © 2011-2022 走看看