robotjs node-api 封装
· 中文· English
这个项目是从 robot.js:https://robotjs.io/ fork 过来的。 主要目的如下:
1、使用 node-api 将 c++接口重新封装。 原来的 robot.js c++的封装是使用 v8 api。不同的 node.js 版本兼容 性不好。切换 node.js 版本需要重新编译。 现在使用 node-api,就没有这个问题了。
2、需要解决 typestring 输入过慢的问题 官方的库在 2020 年后基本没有人维护了,我在使用这个库的 0.6 版本时发现,在 typestring 时,每个字符输入都要好久。体验很差。
3、升级依赖的 node-gyp 版本 老的 robot.js 使用的 node-gyp 版本过低,还依赖 python 2.7 这种已经官方不维护的版本,如果电脑上是 python 3 的环境就会编译不了。
4、方便查 bug 和定制,也顺序学习一下 node addon 的知识
- 删除了一些没有用的接口。
- 去掉了很多测试用例,感觉这些测试用例只是检查接口调用有没有异常,并不能真正的测试接口是否正确,有点鸡肋。后面有可能全部删除。
npm install robotjs_addon
const robot = require("robotjs_addon");
robot.typeString("Hello World");
robot.keyTap("enter");
export function setKeyboardDelay(ms: number): void
export function setMouseDelay(delay: number): void
export function getScreenSize(): { width: number; height: number }
export function updateScreenMetrics(): void
//keyboard
export function keyTap(key: string, modifier?: string | string[]): void
export function keyToggle(key: string, down: string, modifier?: string | string[]): void
export function typeString(string: string): void
//win only ansi
export function typeKeyCodeStringInWin(string: string): void;
//mouse
export function dragMouse(x: number, y: number): void
export function moveMouse(x: number, y: number): void
export function moveMouseSmooth(x: number, y: number, speed?: number): void
export function mouseClick(button?: MouseButton, double?: boolean): void
export function mouseToggle(down?: boolean, button?: MouseButton): void
export function getMousePos(): { x: number; y: number }
本库已经为 windows/linux/mac 预编译了,安装时不需要 c++编译环境
npm install --build-from-source
npm run pack
使用了 node-pre-gyp-github的代码
这里只是说明一下,已经集成到了 github_action
go to Settings -> Developer settings
click Personal access tokens
click Generate new token
Select public_repo and repo_deployment
Generate Token
copy the key that's generated and set NODE_PRE_GYP_GITHUB_TOKEN environment variable to it. Within your command prompt:
SET NODE_PRE_GYP_GITHUB_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
设置完环境变量 NODE_PRE_GYP_GITHUB_TOKEN 后就可以发布了
npm run release
负责编译各个平台的 node module,并上传 github release
负责打包 npm package 并上传 npm registry
../node_modules/node-addon-api/napi-inl.h:2464:34: error: cannot bind non-const lvalue reference of type ‘Napi::CallbackInfo&’ to an rvalue of type ‘Napi::CallbackInfo’
原因是
Napi::Object node_getMousePos(Napi::CallbackInfo &info)
的参数要加 const
Napi::Object node_getMousePos(const Napi::CallbackInfo &info)
./src/mouse.c:12:10: fatal error: X11/extensions/XTest.h: No such file or directory
网上说要安装库
ubuntu:
$ sudo apt-get install xorg-dev
centeros
$ sudo yum install xorg-x11\*
有问题可以提 issue,一起进步
2024-07-25 更新
- 增加 typeKeyCodeStringInWin 接口,支持 qq 密码输入