使用 Node.js 调用 C++ 模块实现跨平台鼠标中键点击事件监听

本文将介绍如何在 Electron 环境下,使用 C++ 开发一个可被 Node.js 调用的模块,用于监听跨平台的鼠标中键点击事件。该模块支持添加和移除事件监听器,并提供回调函数获取鼠标坐标。

1. 创建 C++ 模块

创建一个名为 'middleMouse' 的 C++ 模块,并在其中定义两个函数:

  • addMiddleMouseClickListener: 用于注册鼠标中键事件的监听器。
  • removeMiddleMouseClickListener: 用于移除指定的事件监听器。

使用 std::vector 存储回调函数,在 addMiddleMouseClickListener 中注册鼠标中键事件的监听器,并在回调函数中获取当前鼠标坐标并将其传递给已注册的回调函数。在 removeMiddleMouseClickListener 中移除指定回调函数。

C++ 模块代码:

#include <node.h>
#include <vector>

namespace middleMouse {

  // 定义回调函数类型
  typedef std::function<void(int, int)> CallbackFunc;

  // 定义回调函数列表类型
  typedef std::vector<CallbackFunc> CallbackList;

  // 存储已注册的回调函数
  static CallbackList callbacks;

  // 鼠标中键事件的回调函数
  static void onMouseButton(int button, int state, int x, int y) {
    if (button == GLUT_MIDDLE_BUTTON && state == GLUT_DOWN) {
      // 遍历所有已注册的回调函数并调用
      for (auto callback : callbacks) {
        callback(x, y);
      }
    }
  }

  // 添加事件监听器
  static void addMiddleMouseClickListener(const CallbackFunc& callback) {
    // 将回调函数添加到列表中
    callbacks.push_back(callback);
  }

  // 移除事件监听器
  static void removeMiddleMouseClickListener(const CallbackFunc& callback) {
    // 遍历所有已注册的回调函数,找到并移除指定的回调函数
    for (auto it = callbacks.begin(); it != callbacks.end(); ++it) {
      if (*it == callback) {
        callbacks.erase(it);
        break;
      }
    }
  }

  // 初始化模块
  static void Init(v8::Local<v8::Object> exports) {
    // 注册鼠标中键事件的监听器
    glutMouseFunc(onMouseButton);
    // 将函数导出到 Node.js 中
    NODE_SET_METHOD(exports, 'addMiddleMouseClickListener', addMiddleMouseClickListener);
    NODE_SET_METHOD(exports, 'removeMiddleMouseClickListener', removeMiddleMouseClickListener);
  }

  NODE_MODULE(middleMouse, Init)

}

2. Node.js 调用 C++ 模块

在 Node.js 中使用 require('middleMouse') 引入该模块,并调用 addMiddleMouseClickListenerremoveMiddleMouseClickListener 函数注册和移除事件监听器。在调用回调函数时,使用异步方式避免阻塞主线程。

Node.js 示例代码:

const middleMouse = require('middleMouse');

// 添加事件监听器
middleMouse.addMiddleMouseClickListener((x, y) => {
  console.log(`Middle mouse button clicked at (${x}, ${y})`);
});

// 移除事件监听器
middleMouse.removeMiddleMouseClickListener(callbackFunction);

总结

本文介绍了如何使用 C++ 开发一个跨平台鼠标中键点击事件监听模块,并将其与 Node.js 整合。该模块使用 std::vector 存储回调函数,并在回调函数中获取鼠标坐标,并通过异步方式避免阻塞主线程。开发者可以根据实际需求进行调整和扩展。

用 Node.js 调用 C++ 模块,实现跨平台鼠标中键点击事件监听

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

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