提问者:小点点

键发送操作中cyrrilic字母的键码/编码问题


我面临着一个非常罕见的问题,即使在谷歌上搜索了几个小时也无法解决自己的问题。

我使用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,因为我现在在操作系统中的语言布局是西里尔文的。

它工作得很好,直到我不面对西里尔语的*=>;[问题。打开的方括号有键码@219vk_open_bracket(在Java KeyEvent中)。但是,即使我在布局中添加{“。”:“@219”}{“。”:“open_bracket'},它仍然不起作用。

我发现,KeySend在某种程度上发生了变化,或者它与non-asci符号问题有关。

那么在西里尔文版式中,shift+@55键码与相关,但是在英文版式中没有键码@55那么,如何为西里尔文版式查找键码并解决这个问题呢?


共1个答案

匿名用户

带字符映射的Unicode Subtrange在4个小时的编码后帮了我一把:

“”:'@18-@96-@98-@100-@101',等于Alt+0245的所有字符,在活动OS布局中没有键码。