尝试将挂钩协议传递给SetWindowsHookEx()

时间:2018-04-06 12:23:05

标签: c++ keyboard-hook setwindowshookex

我一直在做一个小小的项目,我遇到了一个奇怪的问题。从本质上讲,它是一个键盘记录器,它使用低级键盘钩来记录击键*。这是我提出的课程。

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,有无括号,不去。

我相当缺乏经验,所以如果这是一个明显的解决方案,请原谅我。此外,澄清这个代码确实并且在我全局声明钩子过程时起作用,但是当它包含在一个它没有的类中时它就会起作用。

*当然,所有这些都是为了学习目的。

0 个答案:

没有答案