上帝保佑 - God4

God Bless

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一个简单的鼠标钩子示例,分两个模块,钩子进程函数在dll中.实现的功能就是将截获的鼠标消息的wParam和lParam传递给主窗口并按16进制显示出来.

//Hookowner.cpp

    
//InstallHook
    
//--------------------------------------------------
    TCHAR DllPath[] = "HookDll.dll";
    HINSTANCE Hook_Dll 
= LoadLibrary(DllPath);
    
if(Hook_Dll)
    
{
        HookProc 
= (HOOKPROC)GetProcAddress(Hook_Dll, "HookProc");
        phHook 
= (HHOOK *)GetProcAddress(Hook_Dll, "hHook");
        phHookWnd 
= (HWND *)GetProcAddress(Hook_Dll, "hHookWnd");
        pUWM_HOOKMESSAGE 
= (UINT *)GetProcAddress(Hook_Dll, "UWM_HOOKMESSAGE");

        HWND hObjWnd 
= NULL;
        DWORD dwObjThreadId 
= 0;
        hObjWnd 
= ::FindWindow("Notepad", NULL);
        
if(hObjWnd)
            dwObjThreadId 
= GetWindowThreadProcessId(hObjWnd, NULL);

        
*phHookWnd = hWnd;
        
*phHook = SetWindowsHookEx(WH_MOUSE, HookProc, Hook_Dll, dwObjThreadId);
        
if(*phHook)
        
{
            
if(dwObjThreadId)
                MessageBox(NULL, 
"Thread Hook""Success", MB_OK);
            
else
                MessageBox(NULL, 
"System Hook""Success", MB_OK);
        }

    }

    
else
    
{
        MessageBox(NULL, 
"LoadLibrary Error""Error", MB_ICONERROR);
    }

    
//--------------------------------------------------

dll内的鼠标钩子执行体.如果在里面再加个简单的获取文本操作,就可以获取一些密码框内的星号密码.网上的有些查看星号密码的小程序,鼠标移动到密码框上,就能把密码显示出来,用的就是这种原理.

//Hookdll.cpp

#pragma data_seg (
"Shared")
__declspec(dllexport) HHOOK hHook 
= NULL;
__declspec(dllexport) HWND hHookWnd 
= NULL;
__declspec(dllexport) UINT UWM_HOOKMESSAGE 
= NULL;
#pragma data_seg ()
#pragma comment(linker, 
"/SECTION:Shared,RWS")

__declspec(dllexport) LRESULT WINAPI HookProc(
int nCode, WPARAM wParam, LPARAM lParam)
{
    
if(nCode>=0)
    
{
        LPMOUSEHOOKSTRUCT pMouseHook 
= (MOUSEHOOKSTRUCT FAR *)lParam;

        
if(IsWindow(hHookWnd))
        
{
            
char str[256= {0};
            sprintf(str, 
"ProcessId=[%08x] wParam=[%08X] lParam=[%08X]", GetCurrentProcessId(), wParam, lParam);
            SendMessage(hHookWnd, WM_SETTEXT, 
0, (LPARAM)str);
            SendMessage(hHookWnd, UWM_HOOKMESSAGE, 
0, (LPARAM)pMouseHook->wHitTestCode);
        }

    }


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

源代码下载:/Files/God4/Hook.rar
posted on 2007-10-24 20:39  God4  阅读(2026)  评论(0编辑  收藏  举报