如何在Electron中使用鍵盤控制庫

如何在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')

即可正常使用了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章