我在ocx中加载了一个勾子子程,通过勾子子程已经捕获到按键消息,可我怎么处理呢,怎么发给应用程序呢?比如:
就是网页上,嵌了一个ocx,但这个ocx中有一个输入框控件,可按BkSp(回退键)就将IE后退了,所以要用勾子来解决,该怎么做呢?

解决方案 »

  1.   

    CallNextHook 就可以了,其他的操作系统应该会给你做了。
      

  2.   

    可在下面的方法中,并未捕获到按键消息啊
    (前提,勾子子程加载是成功的,也能捕获到按揭消息,应用程序还是接受不到)
    BOOL CImageDocView::PreTranslateMessage(MSG* pMsg)(这里所说的应用程序,是指:嵌入了ocx的html页面,ocx中加载了勾子子程)
    不知道为什么,希望能有高手给予指点,谢谢。
      

  3.   

    HHOOK hHook=NULL;
    extern "C"
    LRESULT CALLBACK KeyboardProc(int nCode,     
    WPARAM wParam,//虚键代码
    LPARAM lParam)// 击键消息的信息
    {
    HWND myhWnd=GetFocus();

    if (wParam == VK_F12)
    {
    PostMessage(myhWnd, WM_KEYDOWN,(WORD)wParam,(DWORD)lParam); 
    }

    return CallNextHookEx(hHook,nCode,wParam,lParam);
    }
    这样PostMessage是否可以呢?可我在BOOL CImageDocView::PreTranslateMessage(MSG* pMsg)
    中根本捕获不到消息啊
      

  4.   

    你的意思是不是屏蔽“按BkSp(回退键)就将IE后退了”的功能,然后删除ocx的edit中的一个字符啊,这样的话你可以在
    if (wParam == VK_F12)
    {
    PostMessage(myhWnd, WM_KEYDOWN,(WORD)wParam,(DWORD)lParam); 
    }
    中处理啊。
      

  5.   

    在哪里处理啊,怎么转到PreTranslateMessage接口中呢?
      

  6.   

    http://www.vckbase.com/code/viewcode.asp?id=2582
      

  7.   

    可是我在编辑框中按了BkSp键,还是没反映,不知道怎么处理了。
      

  8.   

    那么,再问:
    怎样将拦截的键盘消息,丢弃掉呢?下面就是一个勾子子程,如果要实现丢弃,该怎么做?
    extern "C"
    >LRESULT CALLBACK KeyboardProc(int nCode,     
    >        WPARAM wParam,//虚键代码
    >        LPARAM lParam)// 击键消息的信息
    >{
    > HWND hWndTag=NULL;
    > LPMSG pMsg = (LPMSG)lParam; 
    > hWndTag = pMsg->hwnd;
    > if (hWndTag!=NULL)
    > {
    >  if (pMsg->message == WM_KEYDOWN)
    >  {
    >   if (pMsg->wParam == VK_BACK)
    >   {
    >    SendMessage(hWndTag, WM_KEYDOWN, wParam, lParam);
    >   }
    >  } 
    > }

    > return CallNextHookEx(hHook,nCode,wParam,lParam);
    >}
      

  9.   

    可以获得当前窗口的句柄(用FindWindow)然后用sendmessage就可以了:)
      

  10.   

    如果想丢弃的话,应该不用这句吧:
    return CallNextHookEx(hHook,nCode,wParam,lParam);你在想丢弃的地方直接返回试试。
      

  11.   

    HHOOK hHook=NULL;
    extern "C"
    LRESULT CALLBACK KeyboardProc(int nCode,     
    WPARAM wParam,//虚键代码
    LPARAM lParam)// 击键消息的信息
    {
    if (nCode == HC_ACTION)
    {
    BOOL bIsHookHeadoff=FALSE;
    //回退键:回退一个字符
    if (wParam == VK_BACK)
    {
    //按次键时处理开始
    ...
    //按次键时处理开始 bIsHookHeadoff = TRUE;
    }

    //判断按键消息是否需要被扔掉
    if (bIsHookHeadoff)
    {
    return bIsHookHeadoff;
    }
    } return CallNextHookEx(hHook,nCode,wParam,lParam);
    }//加载钩子
    hHook=SetWindowsHookEx(WH_KEYBOARD,
    KeyboardProc,
    NULL,
    GetCurrentThreadId());这是一个线程钩子。
      

  12.   

    非常感谢大伙们的热心支持和帮助!也便于以后和大家多沟通,特留下本人的msn帐号:[email protected],欢迎加入。