您的位置:首页 > 其它

vc学习笔记之hook(消息钩子过程)

2013-11-20 16:48 561 查看
//hookdll00.cpp

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

#include<windows.h>

//把全局变量声明在新建dll节“MySec”中

#pragma data_seg("MySec")

HWND ghwnd=NULL;

#pragma data_seg()
//把dll节“MySec”设为RWS(read write share)

#pragma comment(linker,"/section:MySec,RWS")

HHOOK hmousehook=NULL;

HHOOK hkeyboardhook=NULL;

LRESULT CALLBACK MouseProc( int nCode, WPARAM wParam, LPARAM lParam )         

{
return 1;

}

LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)

{
 if(VK_F2==wParam)
{
    SendMessage(ghwnd,WM_CLOSE,0,0);
    UnhookWindowsHookEx(hmousehook);
    UnhookWindowsHookEx(hkeyboardhook);
}
else 
return 1;

}

void sethook(HWND hwnd)

{

    ghwnd=hwnd;

    hmousehook=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("hookdll00"),0);

    //GetModuleHandle函数参数类型为LPCWSTR,如调试失败,hookdll00工程应设为多字节或未设置

    hkeyboardhook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("hookdll00.dll"),0);

}

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

//hookdll00.h

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

#include <windows.h>

void sethook(HWND hwnd);

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

//hookdll00.def

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

LIBRARY hookdll00

EXPORTS

sethook

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

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

新建基于对话框的mfc应用程序hooktest00,用来测试hookdll00。

在hooktest00Dlg类的OnInitDialog()函数中添加如下代码:

int x=GetSystemMetrics(SM_CXSCREEN);
int y=GetSystemMetrics(SM_CYSCREEN);
SetWindowPos(&wndTopMost,0,0,x,y,SWP_SHOWWINDOW);//把当前窗体设为Top窗体,并占满屏幕。
sethook(m_hWnd);

//---------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: