zoukankan      html  css  js  c++  java
  • ActiveX控件在IE中不响应Backspace消息

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

  • 相关阅读:
    word 软换行与硬换行
    正态分布(normal distribution)与偏态分布(skewed distribution)
    hdu1043Eight (经典的八数码)(康托展开+BFS)
    TCP和UDP的区别
    SDUT2608(Alice and Bob)
    The Six Types of Rails Association
    排序算法c语言描述---堆排序
    Jenkins的plugin开发
    SDUTRescue The Princess(数学问题)
    【数据库系列】之存储过程与触发器
  • 原文地址:https://www.cnblogs.com/dongc/p/5225131.html
Copyright © 2011-2022 走看看