在DLL CPP中
#include <Windows.h>
HWND g_hwnd;
HHOOK g_hMouse=NULL;
HHOOK g_hKeyboard=NULL;
//鼠标钩子过程
LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
;
return 1; //这个钩子将屏蔽掉所有鼠标消息
}
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(VK_F2 == wParam) //F2关闭
{
::SendMessageA(g_hwnd,WM_CLOSE,0,0);
::UnhookWindowsHookEx(::g_hKeyboard);
::UnhookWindowsHookEx(::g_hMouse);
}
return 1;
}
//安装鼠标钩子过程的函数
void SetHook( HWND hwnd )
{
::g_hwnd=hwnd; //这条赋值语句其实也可以写在应用程序的函数外
::g_hMouse=::SetWindowsHookExA(
WH_MOUSE,
::MouseProc,
::GetModuleHandleA("0712B.dll"), //安装钩子的DLL的模块句柄 [注]
0 //第四个参数设为0 全局钩子 所有进程
);
;
::g_hKeyboard=::SetWindowsHookExA(
WH_KEYBOARD,
::KeyboardProc,
::GetModuleHandleA("0712B.dll"),
0
);
;
}
/*
//对比之前的局部钩子
::g_hKeyboard=
::SetWindowsHookExA //最后设置的钩子会最先捞消息
(
WH_KEYBOARD, //键盘钩子
::KeyboardProc,
NULL,
::GetCurrentThreadId()
);
*/
在测试程序 stdafx.h中
#pragma comment (lib,"0712B.lib")
_declspec(dllimport) void SetHook(HWND hwnd);
initDlg()中
::SetHook(this->m_hWnd);
将LIB文件复制到testB文件夹里(textB与Debug和Release文件夹平级)
将DLL文件复制到Debug文件夹里
下面是DLL的调试方法
在测试程序中设置断点
运行后,停在断点是 不要按F10 step out 不要按F5 要按F11 step in
然后就会进入DLL函数中
====================================================================================
[注]
模块句柄除了这种方法
::GetModuleHandleA("0712B.dll"),
还可以在DLL的main函数中获取
HINSTANCE g_DLL_hinst
BOOL WINAPI DLLmain(
HINSTANCE hinst,
DWORD fdwReason,
LPVOID lpvReverved
)
{
::g_DLL_hinst = hinst;
}
调用的时候使用这个g_DLL_hinst 就可以了
风行者引领群雄者行风