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

2019-10-22 17:40:07 浏览数 (1)

官网

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

代码语言:javascript复制
npm install -g cnpm --registry=https://registry.npm.taobao.org

或者更新npm的包镜像源

代码语言:javascript复制
sudo npm config set registry https://registry.npm.taobao.org
sudo npm config list

还原默认配置

代码语言:javascript复制
sudo npm config set registry https://registry.npmjs.org

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

代码语言:javascript复制
npm install -g --production windows-build-tools
npm install -g node-gyp

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

代码语言:javascript复制
C:UsersJianAppDataRoamingnpmnode_moduleswindows-build-tools

重新安装

设置python路径

代码语言:javascript复制
npm config set python C:UsersJian.windows-build-toolspython27python.exe

构建

添加robotjs依赖为Git仓库

代码语言:javascript复制
"dependencies": {
    "robotjs": "git https://github.com/octalmage/robotjs.git"
}

安装依赖

代码语言:javascript复制
npm install

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

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

下载依赖

代码语言:javascript复制
cnpm install

编译

代码语言:javascript复制
node-gyp rebuild --python C:UsersJian.windows-build-toolspython27python.exe

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

查看系统的Node版本

代码语言:javascript复制
node -v

获取Electron内部的node版本

在代码中打印信息

代码语言:javascript复制
console.info(process.versions);

结果如下

代码语言:javascript复制
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中使用需要重新构建

代码语言:javascript复制
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.

所以

代码语言:javascript复制
electron: "6.0.12"

推断出

代码语言:javascript复制
--target=6.0.12

node和abi的对应关系:参见

但是

代码语言:javascript复制
node: "12.4.0"

并没有在对应表里

代码语言:javascript复制
{
  "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的版本都是一样的

所以

代码语言:javascript复制
--abi=72

整体的命令就是

代码语言:javascript复制
npm rebuild --runtime=electron --target=6.0.12 --disturl=https://atom.io/download/atom-shell --abi=72

当然也可以配置到 package.json

代码语言:javascript复制
"rebuild": "npm rebuild --runtime=electron --target=6.0.12 --disturl=https://atom.io/download/atom-shell --abi=72"

至此 RobotJS就能正常使用了

0 人点赞