为什么SetWindowsHookEx不接受钩子程序?

 聪VS霞_539 发布于 2023-02-11 08:23

我正在尝试创建一个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'创建指向成员的指针

按照上面的建议做也不能解决问题!

我在这里失踪了什么?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有