electron 如何获得文本光标的位置(不是鼠标光标)从当用户按下全局热键,使我的电子应用程序成为焦点?

xdyibdwo  于 12个月前  发布在  Electron
关注(0)|答案(1)|浏览(239)

我有一个emoji picker Electron app。
假设用户已经打开了这个Electron应用程序,并让它在后台运行。
他们当前正在外部应用中键入文本(文本光标 Flink ),例如在TextEdit或浏览器的文本字段中。
然后他们按下全局键盘热键,这使我的表情符号选择器Electron应用程序成为焦点。
1.如何设置我的应用程序的位置,以匹配他们的文本光标在外部应用程序中的位置?
1.当用户选择一个表情符号时,我希望我的应用将表情符号写入用户的文本光标(而不是鼠标指针)在他们关注我的应用之前所在的位置。
我该怎么做?
(E.g.我希望它像Mac上的Control + Command + Space一样工作。
screen.getCursorScreenPoint()似乎只提供mouse cursor position
P.S.如果答案要求我的应用程序使用用户的剪贴板,我想首先保存用户剪贴板中的任何内容的备份,然后在粘贴表情符号后恢复剪贴板内容。
没有真实的答案的老问题:

z9ju0rcb

z9ju0rcb1#

我不认为Electron本身提供了在外部应用程序中直接访问文本光标位置的功能。
一个可能的解决方法是使用本机模块或外部脚本(如Python,适用于macOS的AppleScript等)从系统中获取文本光标位置。但是.这种方法在不同的应用程序和操作系统中可能不可靠或不一致。
在外部应用程序中直接控制文本光标也是如此:这超出了Electron的能力范围。
一个实用的方法是使用剪贴板:

  • 保存当前剪贴板内容。
  • 将选定的表情符号复制到剪贴板。
  • 模拟“粘贴”键盘命令来插入表情符号。
  • 恢复原始剪贴板内容。

您可以使用Node.js包,例如robotjs用于模拟键盘事件,clipboardy用于剪贴板操作。

const { clipboard } = require('electron');
const robot = require('robotjs');
const clipboardy = require('clipboardy');

// Save current clipboard contents
let originalClipboard = clipboardy.readSync();

// Function to insert emoji
function insertEmoji(emoji) {
  // Copy emoji to clipboard
  clipboardy.writeSync(emoji);

  // Simulate 'Paste' command
  robot.keyTap('v', ['control']); // Use 'command' for macOS

  // Restore original clipboard contents
  clipboardy.writeSync(originalClipboard);
}

// Usage
// When user selects an emoji in your app
insertEmoji("😊");

字符串
折衷的办法是,由于Electron功能的限制,您无法将应用程序精确定位在文本光标附近。

相关问题