DLL_PROCESS_DETACH:进程正在释放DLL
DLL_THREAD_ATTACH:进程已创建一个新的线程
DLL_THREAD_DETACH:进程已舍弃了一个线程
总的来说,无论何时调用DllMain()函数,都必须根据What的内容来采取适当的动作。这种适当的动作可以什么都不做,但不是返回非零值。
DllMain()接下来的便是设置钩子,键盘处理,和释放钩子。
2:建立头文件
正如应用程序所使用的其它任何库函数一样,程序也必须包含dll内的函数的原型。所有得Windows程序都必须包含windows.h的原因。所以我们现在建立一个头文件hookdll.h如下:
#defineDllImportextern"C"__declspec(dllimport)
DllImportvoidInstallHook(intnCode);
DllImportLRESULTCALLBACKKeyBoardProc(intnCode,WPARAMwParam,LPARAMlParam);
DllImportvoidEndHook(void);
使用dllimport主要是为了使代码更高效,因此推荐使用它。但是在导入数据时是需要dllimport的。当完成了上面的程序后,建一个项目工程,
不妨为hookdll,然后将hookdll.c插入导项目工程中,编译,则可以生成了hookdll.dll和hookdll.lib。
3:建立程序主文件
我们在上面作的所有得工作都是为现在的主程序打得基础。其实当我们完成了Dll文件后,剩下的就是调用设置钩子函数:InstallHook。如果你对
windows编程十分的熟悉,那么你可以在你任何需要的时候来调用InstallHook。但是在你必须记住在你退出程序的时候你需要调EndHook
以便释放你所装入的钩子函数。现在我在建立了一个hookspy.cpp,并将生成好的hookdll.dll和hookdll.lib拷贝到从一个目录
下,并建立一个hookspy的项目工程。将hookspy.cpp,hookdll.dll,hookdll.lib,hookdll.h插入到项目工
程中去。然后在建立windows窗口时就将钩子设置,在退出程序时退出钩子函数。比如:
caseWM_CREATE:
InstallHook(TRUE);
break;
caseWM_DESTROY://terminatetheprogram
EndHook();
PostQuitMessage(0);
break;
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-27965-6.html
以前最起码吃
父母的美德是一笔巨大的财富