nodejs c++通过 SetWindowsHookEx监听鼠标中键按钮按下lambda表达式写法
以下是通过 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();
});
``
原文地址: https://www.cveoy.top/t/topic/fGaq 著作权归作者所有。请勿转载和采集!