electron开发客户端,模拟按键操作,兼容怎么处理?

385 阅读1分钟

重金悬赏大佬解答一下问题:

最近在使用electron开发过程中遇到了模拟按键兼容问题。

需求如下:

  • 基于uIohhok-napi监听系统级鼠标选中文本事件。
  • 使用@nut-tree/nut-js获取当前粘贴板内容,留存备用。
  • 检测到鼠标选中之后,模拟按键操作Ctrl+C,将选中文本复制到粘贴板,并获取最新粘贴板内容。
  • 最后一步,将之前备用的粘贴板内容,恢复到粘贴板。

示例代码:

 /**
   * 获取选中文本(跨平台方案)
   */
  public async getSelectedText(): Promise<string> {
    this.isUserCopying = true
    try {
      // 备份当前剪贴板
      const backupClipboard = await this.getClipboard()

      // 执行复制操作
      await keyboard.pressKey(this.cmd, Key.C)
      await keyboard.releaseKey(this.cmd, Key.C)

      // 获取文本
      const selectedText = await this.getClipboard()

      // 恢复原始剪贴板内容
      await this.setClipboard(backupClipboard)
      return selectedText
    } catch (error) {
      this.isUserCopying = false
      throw error
    }
  }

这样操作,确实可以实现复制系统级选中文本,但是有个问题: 当复制执行过程中,用户也同样按下了相同的按钮,就会因为Ctrl释放时机的原因,导致用户本身复制的意图,变成输入C。

这与我的预期不符,体验感不好!

我期望的是,用户在执行模拟复制过程中,和用户操作互不影响,如果用户操作了,粘贴板的内容不恢复,为当前选中内容。

但是,经过我无数次的尝试,都没能解决这个问题。

想咨询一下,大佬们,有没有解决这个问题的办法,望不吝赐教!

感激不尽!

能解决问题的大佬,帮个忙,重金酬谢!!!!