专栏首页码客Electron中的键盘鼠标操作(Windows环境下)

Electron中的键盘鼠标操作(Windows环境下)

官网

ROBOTJS官网: https://robotjs.io/docs/ ROBOTJS源码: https://github.com/octalmage/robotjs NodeJS地址:https://nodejs.org/en/download/ Electron版本: https://electronjs.org/releases/stable

环境设置

Node版本不要用最新版本 用v10.16.3即可

安装cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

或者更新npm的包镜像源

sudo npm config set registry https://registry.npm.taobao.org
sudo npm config list

还原默认配置

sudo npm config set registry https://registry.npmjs.org

注意:要用管理员身份运行CMD

npm install -g --production windows-build-tools
npm install -g node-gyp

如果windows-build-tools删除下面的文件夹(根据自己系统的情况查找)

C:\Users\Jian\AppData\Roaming\npm\node_modules\windows-build-tools

重新安装

设置python路径

npm config set python C:\Users\Jian\.windows-build-tools\python27\python.exe

构建

添加robotjs依赖为Git仓库

"dependencies": {
    "robotjs": "git+https://github.com/octalmage/robotjs.git"
}

安装依赖

npm install

打开项目下的node_modules下的`_robotjs@0.5.1@robotjs`文件夹

如果没有生成/build/Release/robotjs.node 就执行下面的操作

下载依赖

cnpm install

编译

node-gyp rebuild --python C:\Users\Jian\.windows-build-tools\python27\python.exe

构建的robotjs.node的Node版本如果和Electron中的Node版本不一样的话就需要执行下面的rebuild操作

查看系统的Node版本

node -v

获取Electron内部的node版本

在代码中打印信息

console.info(process.versions);

结果如下

ares: "1.15.0"
brotli: "1.0.7"
chrome: "76.0.3809.146"
electron: "6.0.12"
http_parser: "2.8.0"
icu: "64.2"
llhttp: "1.1.3"
modules: "73"
napi: "4"
nghttp2: "1.38.0"
node: "12.4.0"
openssl: "1.1.0"
unicode: "12.1"
uv: "1.29.1"
v8: "7.6.303.31-electron.0"
zlib: "1.2.11"

在Electron中使用需要重新构建

npm rebuild --runtime=electron --target=1.1.3 --disturl=https://atom.io/download/atom-shell --abi=48

其中的

Target should be the Electron version, and abi should be the abi version of the included Node.

所以

electron: "6.0.12"

推断出

--target=6.0.12

node和abi的对应关系:参见

但是

node: "12.4.0"

并没有在对应表里

{
  "10.15.3": {
    "node_abi": 64,
    "v8": "6.8"
  },
  "11.0.0": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "11.1.0": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "11.2.0": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "11.3.0": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "11.4.0": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "11.5.0": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "11.6.0": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "11.7.0": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "11.8.0": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "11.9.0": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "11.10.0": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "11.10.1": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "11.11.0": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "11.12.0": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "11.13.0": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "11.14.0": {
    "node_abi": 67,
    "v8": "7.0"
  },
  "12.0.0": {
    "node_abi": 72,
    "v8": "7.4"
  }
}

但是我们发现每一个大的node版本对应的node_abi的版本都是一样的

所以

--abi=72

整体的命令就是

npm rebuild --runtime=electron --target=6.0.12 --disturl=https://atom.io/download/atom-shell --abi=72

当然也可以配置到 package.json

"rebuild": "npm rebuild --runtime=electron --target=6.0.12 --disturl=https://atom.io/download/atom-shell --abi=72"

至此 RobotJS就能正常使用了

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【CSS】Houdini, CSS的成人礼

    简单地讲,Paint API就是允许你通过JavaScript注册一个背景函数,类似于linear-gradient()那种,在定义时候可以提供Canvas的2...

    外婆的彭湖湾
  • 不仅会用@Async,我把源码也梳理了一遍(下)

    终于到了源码分析的环节了,在这之前我已经写过了两篇文章专门分析这个@Async了,还没看过的同学先去看下哈。

    java思维导图
  • 初探Electron,从入门到实践

    在开始之前,我想您一定会有这样的困惑:标题里的Electron 是什么?Electron能做什么?许多伟大的公司使用Electron框架的原因又是什么?

    葡萄城控件
  • 【Node.js】 bodyparser实现原理解析

    也许你第一次和bodyparser相遇是在使用Koa框架的时候。当我们尝试从一个浏览器发来的POST请求中取得请求报文实体的时候,这个时候,我们想,这个从Koa...

    外婆的彭湖湾
  • javascript中优雅的处理async和await异常

    无论是return了Promise, 还是内部调用了await, 就算什么也没做,它也返回promise; 一个函数,只要被标记了async,那么它就返回...

    liulun
  • node+express构建后端项目

    项目启动后,在浏览器就可以访问了localhost:3000,访问成功会出现以下页面

    程序员不务正业
  • 带你深入了解NPM——NPM初学者指南

    前段时间,我们邀请了我们“城内”(葡萄城)资深开发工程师刘涛为大家分享了一次干货满满的关于Electron线上公开课,在课程过程中有不少同学对于NPM的概念和用...

    葡萄城控件
  • Ceph集群部署

    近期进行公司业务容器化改造,在为kubernetes提供存储选型方面,在选型中本地存储不可跨node,NFS共享存储不好做高可用,因此选型Ceph来为k8s提供...

    KaliArch
  • es6一句话拾遗

    liulun
  • centos安装nodejs并配置生产环境,基于pm2

    pm2的日志文件:/root/.pm2/logs下面 查看服务器上运行的NODE服务,执行:pm2 list 删除一个服务,执行pm2 delete [...

    liulun

扫码关注云+社区

领取腾讯云代金券