以下是通过 SetWindowsHookEx 监听鼠标中键按钮按下的 Node.js C++ 代码,使用 lambda 表达式写法:

#include <napi.h>
#include <windows.h>

HHOOK g_hook;

LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
    if (nCode >= 0) {
        if (wParam == WM_MBUTTONDOWN) {
            Napi::Env env = Napi::Env::Default();
            Napi::Object eventObj = Napi::Object::New(env);
            eventObj.Set("type", "mousedown");
            eventObj.Set("button", "middle");
            Napi::Function callback = env.Global().Get("onMouseEvent").As<Napi::Function>();
            callback.Call({eventObj});
        }
    }
    return CallNextHookEx(g_hook, nCode, wParam, lParam);
}

Napi::Value StartHook(const Napi::CallbackInfo& info) {
    g_hook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, GetModuleHandle(NULL), 0);
    return Napi::Boolean::New(info.Env(), g_hook != NULL);
}

Napi::Value StopHook(const Napi::CallbackInfo& info) {
    if (g_hook) {
        UnhookWindowsHookEx(g_hook);
        g_hook = NULL;
    }
    return Napi::Boolean::New(info.Env(), true);
}

Napi::Object Init(Napi::Env env, Napi::Object exports) {
    exports.Set(Napi::String::New(env, "startHook"), Napi::Function::New(env, StartHook));
    exports.Set(Napi::String::New(env, "stopHook"), Napi::Function::New(env, StopHook));
    return exports;
}

NODE_API_MODULE(NODE_GYP_MODULE_NAME, Init)

其中,MouseHookProc 函数是钩子过程函数,当检测到鼠标中键按钮按下时,会通过 onMouseEvent 回调函数向 Node.js 发送事件。在 StartHook 函数中,使用 SetWindowsHookEx 函数注册钩子,然后在 StopHook 函数中取消钩子注册。在 Node.js 中,可以通过以下方式调用 C++ 模块中的函数:

const { startHook, stopHook } = require('./build/Release/mousehook.node');

function onMouseEvent(event) {
    console.log(event); // { type: 'mousedown', button: 'middle' }
}

startHook();

global.onMouseEvent = onMouseEvent;

process.on('exit', () => {
    stopHook();
});
``
nodejs c++通过 SetWindowsHookEx监听鼠标中键按钮按下lambda表达式写法

原文地址: https://www.cveoy.top/t/topic/fGaq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录