如何在Electron中使用键盘控制库

    技术2025-04-18  40

    如何在Electron中使用键盘控制库

    关键词: electron ,vue,robotjs,ihook

    最近闲来无事,看按键精灵极其不顺眼,但是没办法,快速创建脚本还是觉得按键精灵方便,但是在逻辑上实在是很难操作,因为它的语法很怪(我觉得除了注释符号都一样之外其他都不一样!),曾经尝试在脚本中加个标志判断(没错,就是判断是不是收藏品,ff14警告),捣鼓了20分钟的if语法和用户变量,最后还是失败了。于是就准备自己撸一个带界面的脚本工具,其实脚本逻辑都很简单,界面的搭建也很简单,重点就是在于键盘的控制方面,看了一下python的库很丰富也很简单,但是QT我真的没学过,于是想到了曾经使用过一次的electron,作为目前非常火的基于Nodejs桌面端开发框架,我觉得它应该没有问题(maybe)

    既然使用Electron,那么自然需要使用JS的键盘库,so,我找到了robotJs

    基于robotJs,还有一个比较火的再封装库叫iohook

    一个是键盘自动化操作库,一个是按键监听库,功能齐全,语义简便,于是我尝试了cnpm install,果然事情没有那么顺利,出问题了。

    由于robotJs中的代码大多数是c,所以需要重新打包成electron支持的库,问题就出现在打包上。它必须和electron的版本进行匹配。百度资料比较少,可能没几个人用js来做自动化吧(maybe)。

    不过,经过两个小时的现学现卖和思考(果然思考比较重要),我成功解决了问题,下面简单记录一下:

    electron 配置 robotJs

    首先常规操作,先通过cnpm下载这个库

      cnpm install robotjs

    然后需要对这个库进行rebuild操作

    其实,在上一步安装的时候就会出错,因为它会尝试自动rebuild,但是会失败,如果成功了,那当我没说

    这里需要额外装一个工具

    npm install --global --production windows-build-tool

    因为编译需要依赖python2.7,(python3.6不可以,因为我装了3.6,在上一步安装的时候自动build使用python3.6进行编译出现语法错误,啊这)和vsc++,不过运行上述命令后这些都会自动安装,可以省不少事。

     

    上一步参考了一篇博客(我真的在很用心的百度)

    上一步过后,经过一段时间的等待,成功了差不多长这样(控制台的格式有时候就是奇奇怪怪的):

     

    然后开始rebuild:

    cnpm rebuild --runtime=electron --target=8.0.0 --disturl=https://atom.io/download/atom-shell --abi=76

    其中--target参数表示你的electron的版本,--abi表示你的ABI版本

    通过以下命令查看--target和--abi的参数:

    console.log('process.versions.electron', process.versions.electron) console.log('process.versions.modules', process.versions.modules)

    到这里,robotJs就安装完成了,在你的node_modules文件夹下可以找到robotJs出现了build文件夹,这样就可以正确引入robotJs了。

    electron 配置 iohook

    iohook基于robotJs开发的,所以其实道理都差不多,只不过幸运的是,iohook的作者给出了一些预打包的版本,就是说你不必自己打包。

    但是,需要注意版本匹配,不是所有的electron版本都支持

    依然是常规操作,cnpm下载依赖包

    cnpm install iohook

    在package.json中配置一下iohook的runtime version:

    "iohook" : { "targets": [ ,"electron-76" ], "platforms": [ "win32" ], "arches": [ "x64" ] }

    这里的76就是abi版本号

    然后rebuild一下:

    cnpm rebuild --runtime=electron --target=8.0.0 --disturl=https://atom.io/download/atom-shell --abi=76

    它会根据你的配置去尝试下载electron-v76-win32-x64这个文件,如果下载成功,万事大吉。但是可能会出现下载失败,因为作者可能没有预打包匹配这个electron的版本,这样的话只能自己编译,但是我没试过。

    electron-vue这个模板使用的版本是2.0.18的,abi版本是57,我在尝试下载的时候就出现了not found 错误,所以我打算升级electron的版本,装了8.0.0,这里还要注意一下,版本不同electron的特性也不同,比如,从2.0.18升级到了8.0.0,需要在main下的index.js中增加一行配置:

     mainWindow = new BrowserWindow({    height: 563,    useContentSize: true,    width: 1000,    webPreferences:{      nodeIntegration:true //增加webPreferences的配置才可以正常运行   } })

    然后正常的通过

    const iohook = require('iohook') const robotJs = require('robotss')

    即可正常使用了。

    Processed: 0.012, SQL: 9