我正在尝试创建一个dll,我可以使用它来监视所有系统事件(进程创建,销毁等)这是我到目前为止的结果:
Dll main - 我的dll的切入点
// dllmain.cpp : Defines the entry point for the DLL application. #include "stdafx.h" #include "CBTHook.h" BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: CBT::CBTHook::SetHandle(hModule); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
DLL头文件
//Dll header file - function signatures #ifdef CBTHOOKDLL_EXPORTS #define CBTHOOKDLL_API __declspec(dllexport) #else #define CBTHOOKDLL_API __declspec(dllimport) #endif namespace CBT { class CBTHook { public: CBTHook(); static void SetHandle(HINSTANCE handle); void InstallHook(); void UnistallHook(); LRESULT CALLBACK HookProcedure(int nCode, WPARAM wparam, LPARAM lparam); ~CBTHook(); private: static HINSTANCE currentProcessHandle; HOOKPROC hkprcSysMsg; static HHOOK hookID; }; }
CBTHook.cpp
// CBTHook.cpp : Defines the exported functions for the DLL application. // #pragma once #include "stdafx.h" #include "CBTHook.h" #include#include using namespace std; namespace CBT { CBTHook::CBTHook() { } void CBTHook::SetHandle(HINSTANCE handle) { currentProcessHandle = handle; } void CBTHook::InstallHook() { hookID = SetWindowsHookEx(WH_CBT,HookProcedure, currentProcessHandle, 0); } void CBTHook::UnistallHook() { UnhookWindowsHookEx(hookID); } LRESULT CALLBACK CBTHook::HookProcedure(int nCode, WPARAM wparam, LPARAM lparam) { if (nCode >= 0) { switch (nCode) { case HCBT_CREATEWND: cout << "Created!~" << endl; break; case HCBT_DESTROYWND: cout << "Destroied!~" << endl; break; default: cout << "sth else" << endl; break; } } else return CallNextHookEx(hookID, nCode, wparam, lparam); } }
现在的问题是,SetWindowsHookEx
不管是什么HookProcedure
时候我已经阅读并在网上看到有问题的函数的返回值是正确的.
我收到错误:
错误C3867:'CBT :: CBTHook :: HookProcedure':函数调用缺少参数列表; 使用'&CBT :: CBTHook :: HookProcedure'创建指向成员的指针
按照上面的建议做也不能解决问题!
我在这里失踪了什么?