重金悬赏大佬解答一下问题:
最近在使用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。
这与我的预期不符,体验感不好!
我期望的是,用户在执行模拟复制过程中,和用户操作互不影响,如果用户操作了,粘贴板的内容不恢复,为当前选中内容。
但是,经过我无数次的尝试,都没能解决这个问题。
想咨询一下,大佬们,有没有解决这个问题的办法,望不吝赐教!
感激不尽!
能解决问题的大佬,帮个忙,重金酬谢!!!!