HOOK怎样捕获得指定的EDIT的键盘消息?越具体越好,分两种情况,一种是本窗体中的EDIT,另一种是其他窗体中的EDIT.先回答正确的给100分.

解决方案 »

  1.   

    edit需要有焦点才能输入,有焦点自然是z top-level
    那么 只要在拦截到键盘输入的时候 判断具有输入焦点的edit 是不是你想要得到的
      

  2.   

    Hook之前先获得EDIT控件的句柄,对于其它程序的窗口,用FindWindow找出窗口,如果嵌套有子窗口,再用FindWindowEx逐层查找,简单情况可以先用SPY++查出控件ID,再GetDlgItem获取句柄。
    将控件句柄传给DLL,保存到共享区的全局变量。
    SetWindowsHookEx的idHook参数给WH_CALLWNDPROC。
    Hook函数中判断目标窗口句柄是EDIT控件的句柄时做处理,判断各种键盘消息,最后CallNextHook。
      

  3.   

    能不能给出示例代码?就那一句话,但是我不知道应该怎么写,我想要的效果是直接对EDIT监控,也就是只捕获指定EDIT的键盘消息.
    我是下面这样写的,但是捕获的是整个窗体的键盘消息:
    SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetWindowThreadProcessId(GetDlgItem(IDC_EDIT1)->m_hWnd,NULL)); 
    //这样捕获的是整个窗体的键盘消息,请问怎么写才只捕获IDC_EDIT1的键盘消息?
    谢谢,帮人帮到底.
      

  4.   

    你需要挂接WH_GETMESSAGE消息HOOK,其中GetMsgProc 过程的lParam指向MSG结构体,里边有当前消息的hWnd。
      

  5.   

    给你看个实例吧  是 vc知识库 上面的   http://www.vckbase.com/document/viewdoc/?id=771虽然他的这个功能现在是无法实现了 (以前可能行的)但是他上面用到的东西 值得你去学学 思考 接分
      

  6.   

    通过全局钩子进行挂钩具体到某个EDIT就要根据句柄来做了
    楼上都 说了~~~~~~
      

  7.   

    写了一个hook键盘消息的密码,截取系统所有的键盘消息,所以写了一个DLL,DLL里边的代码很简单,如下: 
    #include <windows.h> 
    HINSTANCE hMod; 
    #pragma data_seg("My") 
    HHOOK hhk; 
    #pragma data_seg() 
    BOOL APIENTRY DllMain( HANDLE hModule, 
      DWORD  ul_reason_for_call, 
      LPVOID lpReserved 
      ) 

    hMod=(HINSTANCE)hModule; 
        return TRUE; 

    LRESULT  CALLBACK KeyboardP( 
    int code,      // hook code 
    WPARAM wParam,  // virtual-key code 
    LPARAM lParam  // keystroke-message information 
      ) 
    { return 1; 
    /*return CallNextHookEx( 
    hhk,      // handle to current hook 
    code,      // hook code passed to hook procedure 
    wParam,  // value passed to hook procedure 
    lParam  // value passed to hook procedure 
    );*/ } 
    void _declspec(dllexport) sethook() 

    hhk=::SetWindowsHookEx( 
    WH_KEYBOARD,        // hook type 
    KeyboardP,    // hook procedure 
    hMod,    // handle to application instance 
    0  // thread identifier 
    ); 

    共享数据段在DEF文件里说明过了,然后又写一个个简单的程序来应用,如下: 
    #include <windows.h> 
    #include <iostream> 
    #pragma comment(lib,"keydll.lib") 
    void _declspec(dllimport) sethook(); 
    int main() 
    {     sethook(); int a; 
    std::cin>>a; 
    return 0; 
    } 你试试,是不是你需要的
      

  8.   

    本窗体中的干嘛用HOOK?这不多事吗?在PreTranlateMessage中处理就行了。不管是本进程还是其它进程的,你得首先找到这个EDIT的HWND,然后HOOK住DefWindowProc函数,在里面判断和做处理。
      

  9.   

    我的意思是在同一个线程里怎样用钩子函数钩到一个Edit上,只监控这个EDIT,这样问肯定很清楚了,不要理论的,给个代码示例,或者告诉我能不能直接这样实现.还有别告诉我用PreTranslateMessage,我现在只想用钩子实验一下.