如何解决密钥发送操作中的西里尔字母的密钥/编码问题
我面临一个非常罕见的问题,即使经过数小时的搜索,我也无法解决自己。
我使用node-key-sender
(但问题与其他类似的模块,例如robots.js
相似)用于键盘发射(键盘按钮发送操作)
当我使用任何英语单词时,以下功能都可以正常工作:
const ks = require('node-key-sender');
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve,ms));
}
(async function query (query = 'Bread') {
try {
query = query.toLowerCase()
await sleep(1000)
ks.sendText(query); //prints bread in real time after 1 second delay
} catch (e) {
console.error(e)
}
})();
但是当我尝试将其用于任何西里尔字母时,它什么都不做,因为它不包含任何«字母映射»,但是如果我添加它,它可以正常工作,但是...
const ks = require('node-key-sender');
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve,ms));
}
const RuMap = {
"й": 'q',"ц": 'w',"у": 'e',"к": 'r',"е": 't',"н": 'y',"г": 'u',"ш": 'i',"щ": 'o',"з": 'p',"х": 'shift-@55',"ъ": 'close_bracket',"ф": 'a',"ы": 's',"в": 'd',"а": 'f',"п": 'g',"р": 'h',"о": 'j',"л": 'k',"д": 'l',"ж": ';',"э": "'","я": 'z',"ч": 'x',"с": 'c',"м": 'v',"и": 'b',"т": 'n',"ь": 'm',"б": '',"ю": 'slash',};
(async function query (query = 'Хлеб') {
try {
query = query.toLowerCase()
ks.aggregateKeyboardLayout(RuMap);
await sleep(1000)
ks.sendText(query); //prints only 'л' and 'е'
} catch (e) {
console.error(e)
}
})();
问题是,如果我要打印任何非英语单词,我应该在操作系统中更改语言键盘,然后运行此功能,因此西里尔字母已转换为英语根据语言布局图,类似Q => Й
的对应对象:
示例:
因此,如果我想打印单词
ЙЦУКЕН
,我应该将每个字母转换为QWERTY
,并且由于我的语言布局是,机器打印发出以下键,并打印ЙЦУКЕН
。西里尔字母现在在操作系统中。
它工作正常,直到我没有遇到西里尔Х => [
问题。开括号有KeyCode @219
或VK_OPEN_BRACKET
(in Java KeyEvent)。但是,即使我添加到布局{ "х": '@219' }
或{ "х": 'open_bracket' }
,它也仍然无法正常工作。
据我了解,KeySend会以某种方式更改或与non-ASCI
符号问题相关。
因此,在西里尔字母布局中,shift+@55
的KeyCode与?
有关,但是在英语布局中,?
没有keyCode @55
,因此,如何查找西里尔文的布局并解决了这个问题?
解决方法
经过字符映射的Unicode Subtrange可以帮助我经过4个小时的编码:
"х": '@18-@96-@98-@100-@101'
等于所有字符的Alt+0245
,在活动的操作系统布局中没有KeyCode。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。