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);

ActiveX控件在IE中不响应Backspace消息的更多相关文章

  1. 配置ActiveX控件在网页中下载安装

    先检查客户端浏览器是否安装了ActiveX控件,如果没有安装ActiveX,就需要先给浏览器提示下载并允许安装.否则就直接使用该ActiveX控件.我们可以使用CodeBase来满足我们的要求:下面是 ...

  2. Qt编写activex控件在网页中运行

    qt能够实现的东西非常多,还可以写activex控件直接在网页中运行.参照qtdemo下的例子即可. 方案一:可执行文件下载:https://pan.baidu.com/s/14ge9ix2Ny0x7 ...

  3. ActiveX控件在项目中的应用

  4. MFC-[转]基于MFC的ActiveX控件开发

    作者:lidan | 出处:博客园 | 2012/3/13 16:10:34 | 阅读22次 ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web应用中.在VC ...

  5. 使用C#开发ActiveX控件(新)

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  6. 关于使用regsvr32命令注册ActiveX控件失败的解决办法

    昨天小编也遇到这样问题,步骤一切都对,没有错误,但是每次在命令行下输入的时候,都会弹出一个对话框: 最后我发现是存放ActiveX控件的路径中带有中文文件名字所导致,所以导致的错误,我们将所在路径下的 ...

  7. 使用C#开发ActiveX控件(新) 转 http://www.cnblogs.com/yilin/p/csharp-activex.html

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  8. C#制作ActiveX控件及部署升级(摘自网络)

    使用C#开发ActiveX控件 控件开发.制作CAB包.签名.部署 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序 ...

  9. 使用C#开发ActiveX控件

    使用C#开发ActiveX控件(新) 前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动 ...

随机推荐

  1. ggplot2 坐标系相关设置(coord)

    在ggplot中,未来更好的数据可视化效果,我们有时候可能要用到一些坐标转换的操作,比如要画横向条形图或者蜘蛛图等. coord_cartesian(xlim = NULL, ylim = NULL) ...

  2. hdu_5813_Elegant Construction(xjb搞)

    题目链接:hdu_5813_Elegant Construction 题意: 给你n个点,每个点要可以到达ai个点,可以直接可以间接,不能有环,问是否可行,如果可行就任选一种方式连接,并输出连接的边数 ...

  3. 亲身体验:digitalocean vps能做的10件事

    我写过一篇亲身体验:digitalocean和linode评测哪个好,帮助不少网友选购价格便宜性能优异的免备案vps,相信大家对两家产品有所了解.vps的性能和用途远远超过传统的虚拟主机,你拥有独立I ...

  4. C++著名程序库的比较和学习经验(STL.Boost.GUI.XML.网络等等)

    1.C++各大有名库的介绍--C++标准库 2.C++各大有名库的介绍--准标准库Boost 3.C++各大有名库的介绍--GUI 4.C++各大有名库的介绍--网络通信 5.C++各大有名库的介绍- ...

  5. 网页 CSS样式表

    昨天,我主要是对CSS样式表进行了一下复习. CSS样式表主要有三类:内联样式表.内嵌样式表.外部样式表,我们平时一般使用第二种样式表. 选择器主要包括:标签选择器.class选择器.ID选择器.复合 ...

  6. 判断pc浏览器和手机浏览器方法

    一 //平台.设备和操作系统        var system = {            win: false,            mac: false,            xll: f ...

  7. MySql - JdbcType - Oracle类型映射

    MySql - JdbcType - Oracle类型映射   MySQL数据类型 JDBC TYPE Oracle数据类型 BIGINT BIGINT NUMBER(20) TINYINT TINY ...

  8. HADOOP与ORACLE关联

    安装Oracle和Oracle大数据连接器/OLH,尝试把HDFS中的数据文件装载到Oracle中的表 http://f.dataguru.cn/thread-460110-1-1.html 文档讲述 ...

  9. 拦截asp.net mvc输出流做处理, 拦截HTML文本(asp.net MVC版)

    以前的一个贴子写过一个webForm的拦截HTML输出流的版本,最近用到mvc时用同样的方式发生一些问题. 如下图 查了好久也不知道啥原因. 好吧, 我最后选择放弃. 想起以前自定义Response. ...

  10. ZOJ 1967 POJ 2570 Fiber Network

    枚举起点和公司,每次用DFS跑一遍图,预处理出所有的答案.询问的时候很快就能得到答案. #include<cstdio> #include<cmath> #include< ...