1、操作输入法需要导入:

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

2、定义变量:

//键盘钩子句柄
HHOOK g_hKeyboardHook = NULL;
//是否拦截Backspace
bool g_bInterceptBackspace = true;

3、定义键盘钩子回调函数:

LRESULT CALLBACK KeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode > -1)
{
BOOL bRet = FALSE;
LPKBDLLHOOKSTRUCT lpKeyboard = (LPKBDLLHOOKSTRUCT)lParam;
HWND hCurWnd = ::GetFocus();
HIMC hImc = ImmGetContext(hCurWnd);
LONG nSize = ImmGetCompositionString(hImc, GCS_COMPSTR, NULL, 0);
		ImmReleaseContext(hCurWnd, hImc);
if (hImc)
{
if (nSize > 0)
{
//如果按键组合窗口字符串长度大于0,则表明显示了按键组合窗口,交给系统默认处理
g_bInterceptBackspace = false;
bRet = TRUE;
}
else if (nSize == 0)
{
if (!g_bInterceptBackspace)
{
//如果按键组合框窗口字符串等于0,且上次显示了按键组合框窗口,则表明是删除最后一个字符后,交给系统默认处理
g_bInterceptBackspace = true;
bRet = TRUE;
}
}
}
		if (VK_BACK == wParam)
{
if (!bRet)
{
if (lParam & 0x80000000)
{
::SendMessage(::GetFocus(), WM_KEYUP, VK_BACK, 0);
}
else
{
::SendMessage(hCurWnd, WM_KEYDOWN, VK_BACK, 0);
::SendMessage(hCurWnd, WM_CHAR, VK_BACK, 0);
}
return 1;
}
}
} return CallNextHookEx(g_hKeyboardHook, nCode, wParam, lParam);
}

4、安装钩子

g_hKeyboardHook = ::SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardHookProc, 0, GetCurrentThreadId());

5、卸载钩子

::UnhookWindowsHookEx(g_hKeyboardHook);

最新文章

  1. SQL统计
  2. [转]Eclipse SVN冲突解决
  3. 关于mock server
  4. Swift基础--可选绑定和守护绑定
  5. centos安装altas
  6. 数据库时间createtime字段 数据类型的选取
  7. TKStudio 4.6IDE Warning: L6310W: Unable to find ARM libraries.
  8. jquery视频展示 图片轮播
  9. jQuery渐变弹出层
  10. 一个很好的用C#导出数据到Excel模板的方法
  11. 【转】Install Oracle Jdbc driver in your Maven local repository
  12. python进阶篇
  13. 小学四则运算APP 第二阶段冲刺-第三天
  14. Error: failed to execute &#39;C:\Keil\ARM\ARMCC&#39;的解决办法
  15. C#并行Parallel编程模型实战技巧手册
  16. SpringBoot-服务端参数验证-JSR-303验证框架
  17. Linux 网络编程之 Select
  18. 「PKUSC2018」最大前缀和(状压dp)
  19. RANCHER2.0 的简单使用
  20. 关于 svn

热门文章

  1. bootcss
  2. memcached在项目中的应用
  3. HDU 2952 Counting Sheep(DFS)
  4. 正则表达式协助实现排序&amp;&amp;邮箱验证
  5. NOIP2012-普及组复赛-第二题-寻宝
  6. automake,autoconf使用详解
  7. 基于Flash与window平台本地程序通信实现媒体流发布
  8. LibRTMP优化之调整输出块大小
  9. 鼠标滚动事件 - onmousewheel
  10. java代理的深入浅出(二)-CGLIB