我一直在做一个小小的项目,我遇到了一个奇怪的问题。从本质上讲,它是一个键盘记录器,它使用低级键盘钩来记录击键*。这是我提出的课程。
class CLogger {
public:
static CLogger *Logger();
bool OpenLogFile(const char*, const char*);
void WriteToLogFile(UINT, FILE*, char&);
void __cdecl Hook();
void __cdecl Unhook();
LRESULT __stdcall KbdHookProc(int nCode, WPARAM wParam, LPARAM lParam);
private:
CLogger() {};
CLogger(CLogger const&) {};
CLogger& operator = (CLogger const&) {};
static CLogger *pLogger;
/* ... */
FILE *fLog = NULL;
HHOOK _hHook;
KBDLLHOOKSTRUCT kbdstruct;
char buffer;
};
当我尝试实现Hook()
函数
void __cdecl CLogger::Hook() {
if (!(_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KbdHookProc, NULL, 0))) {
MessageBox(NULL, "SetWindowsHookEx() Failed", "Error", MB_ICONERROR);
}
}
具体来说,我收到错误error C3867: 'CLogger::KbdHookProc': function call missing argument list; use '&CLogger::KbdHookProc' to create a pointer to member
我也试过this->KbdHookProc
,有无括号,不去。
我相当缺乏经验,所以如果这是一个明显的解决方案,请原谅我。此外,澄清这个代码确实并且在我全局声明钩子过程时起作用,但是当它包含在一个它没有的类中时它就会起作用。
*当然,所有这些都是为了学习目的。