vc++如何编写键盘钩子
系统钩子和DLL钩子的本质是一段用以处理系统消息的程序, 通过系统调用,将其挂入系统。钩子的种类有很多,每种钩子可以截获并处理相应的消息, 每当特定的消息发出, 在到达目的窗口之前,钩子程序先
DLL 系统钩子和 ,,。 钩子的本质是一段用以处理系统消息的程序通过系统调用将其挂入系统钩子的种 ,,, 类有很多每种钩子可以截获并处理相应的消息每当特定的消息发出在到达目的窗口之 ,、。 前钩子程序先行截获该消息得到对此消息的控制权此时在钩子函数中就可以对截获的 ,。 消息进行加工处理甚至可以强制结束消息的传递 , 在本程序中我们需要捕获在任意窗口上的键盘输入这就需要采用全局钩子以便拦截整 DLLVC6 ,(), 个系统的消息而全局钩子函数必须以动态连接库为载体进行封装中有三种 MFCDLLRegularstaticallylinkedtoMFCDLLMFCDLL ,( 形式的可供选择即标准静态链接 ) 、 RegularusingthesharedMFCDLLMFCDLLExtensionMFCDLL ()( 标准动态链接以及扩展 MFCDLLMFCDLL 。 )。 在本程序中为方便起见采用了标准静态连接 键盘钩子程序示例 KeyKook ,: 本示例程序用到全局钩子函数程序分两部分可执行程序和动态连接库 LaunchDLLMFCAppWizard(DLL)RegularstaticallylinkedtoMFCDLL , 工程并选择 。 首先创建一个 MFCDLLMFCLaunchDLL.dll (),。, 标准静态链接选项以建立扩展动态连接库之后在相应 : 的头文件中添加宏定义和待导出函数的声明 #define DllExport__declspec(dllexport) …… voidWINAPIInstallLaunchEv(); DllExport …… class:publicCWinApp CLaunchDLLApp { public: CLaunchDLLApp(); //{{AFX_VIRTUAL(CLaunchDLLApp) //}}AFX_VIRTUAL //{{AFX_MSG(CLaunchDLLApp) //NOTE-theClassWizardwilladdandremovefunctionshere. member //DONOTEDITwhatyouseeintheseblocksofgeneratedcode! //}}AFX_MSG DECLARE_MESSAGE_MAP() }; Hook LauncherHookSaveLog 同时在实现文件中添加全局变量和全局函数 (): ()、 Hook; HHOOK LRESULTCALLBACK LauncherHook(intnCode,WPARAMwParam,LPARAMlParam); void SaveLog(char*c); ,: 最后完成以上提到的这几个函数的具体编码实现

