robotjs uIOhook 实现自动填写桌面端表单

electron windows robotjs 安装教程

  • 使用npm和pnpm怎么也安装不了,换了所有源都没用
  • 建议使用yarn安装所有依赖

electron项目中使用包管理器引入robotjs和uIOhook后,在使用包管理器运行electron-rebuild就能正常使用这两个插件了 * 需要安装electron-rebuild插件

robotjs 方法及其简要说明:

  • 对鼠标和键盘的操作

1. 鼠标操作

robot.moveMouse(x, y)
// 移动鼠标指针到指定的坐标 (x, y)。
robot.moveMouseSmooth(x, y, [duration])
// 平滑地移动鼠标指针到指定的坐标 (x, y),可选参数 duration 控制移动的时间。
robot.mouseClick([button], [double])
// 模拟鼠标点击,默认为左键单击,可以通过 button 参数指定按钮(left, right, middle),double 参数指定是否双击。
robot.mouseToggle(down, [button])
// 切换鼠标按钮的状态,down 为 true 时按下按钮,为 false 时释放按钮。
robot.getMousePos()
// 获取当前鼠标指针的位置,返回一个包含 x 和 y 属性的对象。
robot.scrollMouse(amount, [direction])	// 这个方法好像没了
robot.scrollMouse(x, y)	// 设置以后没有效果
// 模拟鼠标滚轮滚动,amount 为滚动的步数,direction 为滚动方向(vertical 或 horizontal)。

2. 键盘操作

robot.keyTap(key, [modifierKeys])
// 模拟按键,key 为要按下的键,modifierKeys 为修饰键数组(如 ['shift', 'ctrl'])。
robot.typeString(string)
// 模拟输入字符串。
robot.keyToggle(down, key)
// 切换键的状态,down 为 true 时按下键,为 false 时释放键。
robot.keyToggle(down, key, modifierKeys)
// 切换键的状态,同时可以指定修饰键。

3. 屏幕操作

robot.screen.capture(x, y, width, height)
// 截取屏幕的指定区域,返回一个 ScreenRegion 对象,包含图像数据和元数据。
robot.getPixelColor(x, y)
// 获取指定坐标的像素颜色,返回一个十六进制颜色值字符串。

4. 颜色操作

robot.rgbToHex(r, g, b)
// 将 RGB 颜色值转换为十六进制颜色值字符串。
robot.hexToRgb(hex)
// 将十六进制颜色值字符串转换为 RGB 颜色值对象。

5. 其他

robot.setKeyboardDelay(milliseconds)
// 设置按键之间的延迟时间,单位为毫秒。
robot.getKeyboardDelay()
// 获取当前的按键延迟时间。
robot.getScreenSize()
// 获取屏幕的分辨率,返回一个包含 width 和 height 属性的对象。

6. 示例代码

const robot = require('robotjs');

// 移动鼠标到屏幕中心
const screenSize = robot.getScreenSize();
const centerX = Math.floor(screenSize.width / 2);
const centerY = Math.floor(screenSize.height / 2);
robot.moveMouse(centerX, centerY);

// 单击鼠标左键
robot.mouseClick();

// 输入文本
robot.typeString("Hello, World!");

// 按下和释放 Shift 键
robot.keyToggle('shift', 'down');
robot.keyTap('a'); // 输入大写的 A
robot.keyToggle('shift', 'up');

// 获取当前鼠标位置
const mousePos = robot.getMousePos();
console.log(`Mouse position: ${mousePos.x}, ${mousePos.y}`);

// 获取屏幕中心的像素颜色
const color = robot.getPixelColor(centerX, centerY);
console.log(`Color at center: ${color}`);
//首先引入
import robot from 'robotjs'
import {clipboard} from 'electron 
robot.moveMouseSmooth(110,120)  //控制鼠标移动到这个坐标
robot.mouseClick()              //鼠标点击
// robot.keyTap('c',['control'])       // 控制键盘复制
clipboard.writeText(this.arr + '\n')// 复制数据到剪切板,this.arr就是内容
 robot.keyTap('v', ['control']);    // 粘贴

uIOhook

作用: 监听鼠标和键盘事件

  • uIOhook声明的类型
// 可监听事件,鼠标和键盘的点击等事件
declare interface UiohookNapi {
    on(event: 'input', listener: (e: UiohookKeyboardEvent | UiohookMouseEvent | UiohookWheelEvent) => void): this;
    on(event: 'keydown', listener: (e: UiohookKeyboardEvent) => void): this;
    on(event: 'keyup', listener: (e: UiohookKeyboardEvent) => void): this;
    on(event: 'mousedown', listener: (e: UiohookMouseEvent) => void): this;
    on(event: 'mouseup', listener: (e: UiohookMouseEvent) => void): this;
    on(event: 'mousemove', listener: (e: UiohookMouseEvent) => void): this;
    on(event: 'click', listener: (e: UiohookMouseEvent) => void): this;
    on(event: 'wheel', listener: (e: UiohookWheelEvent) => void): this;
}
// 控制监听器的开启
declare class UiohookNapi extends EventEmitter {
    private handler;
    start(): void;
    stop(): void;
    keyTap(key: number, modifiers?: number[]): void;
    keyToggle(key: number, toggle: 'down' | 'up'): void;
}
export declare const uIOhook: UiohookNapi;
export {};

需要注意: 使用on设置监听后stop()只是暂停了监听,并没有移除该事件

  • 如果要移除监听事件需要removeAllListeners
// 每调用一次该函数就会创建一个监听事件,每次点击都会比上一次多一个监听事件,所以要移除
ipcMain.handle('readyGetMouse', (_, index) => {
  return new Promise((resolve, reject) => {
    // 监听鼠标
    uIOhook.on('mousedown', (e) => {
      // 返回坐标
      if (!e) {
        reject('未获取到坐标')
        return
      }
      resolve({ index, position: { x: e.x, y: e.y } })
      uIOhook.stop() // 停止监听
      uIOhook.removeAllListeners()	// 移除所有监听事件
    })
    uIOhook.start() // 开始监听
  })
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值