1 Востаннє редагувалося Betterthanyou (03.06.2020 08:46:07)

Тема: Конвертувати символ в англійський

Потрібно, не залежно від того яка обрана мова вводу, конвертувати символ в англійський
Наприклад
йцу -> qwe

Якщо клавіші "йцу" натиснути при включеній англійській розкладці отримаємо "qwe"

Раніше я користувався таким скриптом:

Він бере віртуальний код клавіши і конвертує його в англійський символ

buffer += String.fromCharCode(e.keyCode);

але сьогодні якимсь чином був введений код 1048, 1057 що означає "ИС"

Запитання: Як конвертувати будь який символ в англійський, відповідно до розміщення символу на клавіатури (тобто, якщо вводиться 1048, 1057(ИС) то після конвертації воно має бути BC) ?

2

Re: Конвертувати символ в англійський

Скласти словник підстанов і брати значення з нього.

Подякували: poklvo1

3

Re: Конвертувати символ в англійський

Словник скласти буде проблематично, а раптом хтось буде користуватися мовою скажімо арабською. Як тестувати скрипт зі словником ? Перевіряти на всіх розкладках клавіатури ?

Подякували: FakiNyan1

4

Re: Конвертувати символ в англійський

Вибачте, їхав в маршрутці, недодивився.
Отже, MDN каже, що keyCode - застарілий параметр, який лишається тільки для сумісності з IE. А використовувати слід code.
І з'ясуйте, яким саме чином було введено ці значення; щось мені підказує, що то не скан-коди клавіш.

Подякували: Betterthanyou, FakiNyan, leofun013

5 Востаннє редагувалося Betterthanyou (05.06.2020 09:05:13)

Re: Конвертувати символ в англійський

koala написав:

І з'ясуйте, яким саме чином було введено ці значення; щось мені підказує, що то не скан-коди клавіш.

Вияснив, це введення здійснювалося сканером бар-коду.

Як емулювати натискання 1048, 1057 щоб перевірити як його сприйме KeyboardEvent.code ?

6

Re: Конвертувати символ в англійський

Якимось Autoit.

Подякували: FakiNyan1

7

Re: Конвертувати символ в англійський

Напевно ніяк не сприйме. Навіть натиск одразу кількох клавіш в живу не дає цього зробити.

В JS емулюючи натиск, видає тільки код першої цифри.

<!DOCTYPE html>
<html>
<body>
<h1>KeyboardEvent code Property</h1>
<p>Press a key on the keyboard in the input field:</p>
<p id="demo"></p>

<script>
document.addEventListener("keypress", function(e){
  alert(e.keyCode);
});

   var pressthiskey = "1048";
    var e = new Event("keypress");
    e.key = pressthiskey;
    e.keyCode = e.key.charCodeAt(0);
    e.which = e.keyCode;
    e.altKey = false;
    e.ctrlKey = true;
    e.shiftKey = false;
    e.metaKey = false;
    e.bubbles = true;
    document.dispatchEvent(e);

</script>

</body>
</html>

8

Re: Конвертувати символ в англійський

VTrim, ви не зрозуміли. Там треба

e.keyCode = 1048;

Але тоді решта полів буде заповнена не браузером, а вручну. А питання саме в тому, який code поставить браузер при keyCode=1048.
Хоча насправді це неважливо. Ви ж не зі сканером штрихкодів хочете працювати, а з клавіатурою, а вона нездатна такі коди видавати, правильно?

9

Re: Конвертувати символ в англійський

Не здатна, видає пусте значення

Подякували: Betterthanyou1

10

Re: Конвертувати символ в англійський

koala написав:

Якимось Autoit.

Як саме ?
Autoit має функцію send - "Sends simulated keystrokes to the active window."

ASC означає - To send UNICODE characters you must use the "ASC" option and the code of the character you wish to send

з 1048 отримую знак "↑" а мав отримати "И"

В юнікод таблиці основного алфавіту кирилиці 1048 це значення букви "И" (0418 перетворити в 10-кову систему числення = 1048)

#include <MsgBoxConstants.au3>

Sleep(2000)
Send("{ASC 1048}")
MsgBox($MB_SYSTEMMODAL, "Pressed", "I pressed the button", 10)

Що я роблю не так ?

11

Re: Конвертувати символ в англійський

Вибачте, а який саме код приходить? Символи, схожі на "↑", мають різні коди.
Ну і, зрештою, ми ж ніби розібралися - це сканер штрих-кодів надсилав, а не клавіатура, ви можете спокійно відкидати великі значення скан-кодів і обробляти лише ASCII. Тобто це не "ИС", це якісь ліві сигнали, що вашої програми не стосуються.

Подякували: Betterthanyou1

12

Re: Конвертувати символ в англійський

Підозрюю, що воно звідси: https://uk.wikipedia.org/wiki/CP437

13

Re: Конвертувати символ в англійський

koala написав:

Вибачте, а який саме код приходить? Символи, схожі на "↑", мають різні коди.
Ну і, зрештою, ми ж ніби розібралися - це сканер штрих-кодів надсилав, а не клавіатура, ви можете спокійно відкидати великі значення скан-кодів і обробляти лише ASCII. Тобто це не "ИС", це якісь ліві сигнали, що вашої програми не стосуються.

Вже зрозумів де взявся символ стрілочки, надсилається код 1,0,4,8 а не 1048.
Сканери за замовчуванням не можуть читати кирилицю, тому що сканер зчитує і передає набір скан кодів. Видно це якийсь "русифікований" сканер який читає англійські літери, але відправляє кирилицю

ИС - означає "BC", мені це потрібно, це початок "спеціального коду" який запускає скрипт на сторінці.

Звичайно це легко вирішити зробивши "словник", потім заміняти кирилицю на англійські літери, але якщо буде обрана інша мова, знову появиться проблема. Мені потрібно знайти якесь універсальне рішення.

14 Востаннє редагувалося koala (10.06.2020 11:03:37)

Re: Конвертувати символ в англійський

Так, хтось чогось не розуміє - або я, або ви.
Є клавіатура - окремий пристрій зі своїм власним чипом управління, який надсилає сигнали на кшталт "натиснули кнопку №10" чи "відпустили кнопку №22". При цьому не факт, що кнопка була справді натиснута чи відпущена, є купа "розумних" клавіатур, що генерують ці сигнали за внутрішніми правилами.
Є драйвер клавіатури (і ще кілька шарів обробки в ОС), який бере отриманий код із сигналу, перевіряє поточний стан (розкладку, які клавіші натиснуті, статус клавіш NUM LOCK і подібних, активне вікно і т.д. і т.п.) і генерує подію - системну структуру з кількома полями, такими, як тип події, код символу, скан-код і ін. та передає її відповідній програмі (або іншій, як Ctrl+Alt+Del). Аналогічні події можуть генеруватися як іншими драйверами, які чомусь використовують цей метод обробки, так і лівими програмами на кшталт AutoIt.
Є браузер, який приймає системну подію і створює внутрішню подію для обробки JavaScript-ом. Знову ж таки, за певними правилами. Ви обробляєте саме цю подію.

Ну так от, вам не треба обробляти коди клавіш 1048 та 1057, якщо користувач не натискав такі клавіші. Бо таких клавіш немає. Ці події, як ви кажете, створюються сканером штрих-кодів. Це - не клавіші. При скануванні штрих-коду не виникає літер И та С, бо користувач не натискає клавіші B/И та С/C. Користувач сканує штрих-код. Це - коди подій, що не стосуються вашої програми. Або ж стосуються, але тоді ви маєте прямо написати, який саме стандарт підтримує сканер штрих-кодів і які саме штрих-коди мають викликати яку реакцію вашої програми.

Подякували: Betterthanyou, leofun012

15

Re: Конвертувати символ в англійський

До речі, в системній події на скан-код відведено 7 бітів. Тобто з клавіатури неможливо отримати скан-код більший, ніж 127. Більше - означає не кирилицю (це випадковий збіг), а інший пристрій.

Подякували: Betterthanyou1