我面临着一个非常罕见的问题,即使在谷歌上搜索了几个小时也无法解决自己的问题。
我使用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)
}
})();
示例:
因此,如果我想打印单词aprive.ksOH
,我应该将每个字母转换为qwerty
,机器打印会发出以下键,并打印aprive.ksOH
,因为我现在在操作系统中的语言布局是西里尔文的。
它工作得很好,直到我不面对西里尔语的*=>;[
问题。打开的方括号有键码@219
或vk_open_bracket
(在Java KeyEvent中)。但是,即使我在布局中添加{“。”:“@219”}
或{“。”:“open_bracket'}
,它仍然不起作用。
我发现,KeySend在某种程度上发生了变化,或者它与non-asci
符号问题有关。
那么在西里尔文版式中,shift+@55
键码与?
相关,但是在英文版式中?
没有键码@55
那么,如何为西里尔文版式查找键码并解决这个问题呢?
带字符映射的Unicode Subtrange在4个小时的编码后帮了我一把:
“”:'@18-@96-@98-@100-@101'
,等于Alt+0245
的所有字符,在活动OS布局中没有键码。