如何使用 Windows 鼠标挂钩 API 函数C++生成器应用程序中挂钩鼠标事件



我在C++Builder中钩住鼠标事件时遇到问题,它显示错误:

[密件抄送32错误]主机.cpp(24(: E2034 无法将"long * (__stdcall * (_closure ((int,unsigned int,long(((int,unsigned int,long("转换为"long (__stdcall *((int,unsigned int,long("  完整解析器上下文    MainUnit.cpp(22(: parsesing: void TInputHookMain::SetHook(('.

和:

[密件抄送32错误]主机.cpp(24(: E2342 参数"lpfn"中的类型不匹配(需要"long (__stdcall *((int,unsigned int,long(",得到"void"(  完整解析器上下文    MainUnit.cpp(22(: parsesing: void TInputHookMain::SetHook(('.

这是我在主单元中的代码:

HHOOK mouseHook;
void TInputHookMain::ReleaseHook()
{
    UnhookWindowsHookEx(mouseHook);
}
void TInputHookMain::SetHook()
{
    if ( !(mouseHook = SetWindowsHookExW(WH_MOUSE_LL, MouseInputHook, NULL, 0)) )
    {
        ShowMessage("Failed To Install Mouse Hook!");
    }
}
LRESULT __stdcall TInputHookMain::MouseInputHook(int nCode, WPARAM MsgID, LPARAM Data)
{
    if ( nCode >= 0 )
    {
        switch ( MsgID ) {
            case WM_LBUTTONDOWN: ShowMessage("Left Mouse Button Clicked!");
                break;
            case WM_RBUTTONDOWN: ShowMessage("Right Mouse Button Clicked!");
                break;
        }
    }
    return CallNextHookEx(mouseHook, nCode, MsgID, Data);
}

可悲的是,我找不到问题出在哪里。我试图一步一步地遵循C++教程,但到目前为止没有运气。

MouseInputHook()应该是一个全局函数,或者是一个静态类方法。因此,将 static 关键字添加到类头文件中的 MouseInputHook() 声明中。

错误消息表示:_closure函数与所需的回调函数原型不匹配。 _closure 表示 C++Builder 编译器中的"指向非静态类方法的指针"。非静态类方法具有隐藏的this参数,这使得它与SetWindowsHookExW()所需的函数原型不兼容。

最新更新