Клавиатура Arduino: Проблема с языком ввода

Мне нужен Arduino (Leonardo), чтобы открыть cmd, но если язык ввода с клавиатуры не английский, он печатает буквы другого языка.

——— код ———

Keyboard.begin();
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press('r');
delay(1000);
Keyboard.releaseAll();
Keyboard.write("cmd");
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
delay(1000);

——— ——— ———

Итак, мой вопрос: можно ли как-то определить язык, а если его нет, добавить?

Моя идея состояла в том, чтобы установить список языков через powershell, и это было бы идеально для моей программы, но я не знаю, как я могу написать английский текст из Arduino на ПК с другим языком :(

Кроме того, у моего Arduino есть SD-карта, может быть, это поможет.

——— код ———

powershell $OldList = Get-WinUserLanguageList

powershell Set-WinUserLanguageList -LanguageList en-US -Force

-something

powershell Set-WinUserLanguageList -LanguageList $OldList -Force

——— ——— ———

Извините, если это вопрос 0iq, я новичок в Arduino, буду рад услышать ваши идеи!

, 👍1

Обсуждение

ваш вопрос не про ардуино, @jsotola

@jsotola, извините, а о чем тогда речь? Могу ли я перефразировать свой вопрос так: есть ли способ печатать английский текст через arduino в системе с другим языком ввода? Спасибо за ваш ответ!, @Mapagmataas

Как и любая другая USB-клавиатура, ваша Arduino не может изменить язык ввода хоста. Ваша клавиатура не может напрямую изменить язык ввода., @the busybee

Совсем никак? Типа скопировать из файла с сд или как-то проверить? В любом случае спасибо @thebusybee!, @Mapagmataas

Может есть способ проверить печатный текст и если он не английский alt+shift?, @Mapagmataas

@Mapagmataas компьютерная клавиатура не может смотреть на экран, @jsotola


2 ответа


2

Ваш Arduino будет виртуально печатать на такой клавиатуре:

клавиатура без маркировки
© Aon fi – CC-BY 3.0

Видите этикетки на клавишах? Их нет. Ваша ОС Windows имеет свой собственное представление о том, что означает каждая клавиша, но Arduino не может знать что. Вместо этого вы должны явно указать, какую раскладку клавиатуры использовать. использовать, например:

Keyboard.begin(KeyboardLayout_fr_FR);

Если вы этого не сделаете, библиотека клавиатуры будет использовать KeyboardLayout_en_US.

Компьютер никак не может сообщить клавиатуре, какая у нее раскладка. ожидает.

,

Печально, спасибо за ответ, теперь я его не понимаю, @Mapagmataas

Извините, может есть способ проверить печатный текст и если он не английский alt+shift? @ЭдгарБонет, @Mapagmataas

@Mapagmataas: Да, вы можете проверить это, посмотрев на экран. Но клавиатура не может этого сделать, как и Arduino, изображающий из себя клавиатуру., @Edgar Bonet

Извините, я новичок в ардуино) Спасибо!, @Mapagmataas

@Mapagmataas это не имеет ничего общего с Arduino ... проблема с компьютерами и клавиатурами, @jsotola

@jsotola: В принципе, ты прав. Тем не менее, это та информация, которая вас интересует только тогда, когда вы начинаете использовать библиотеку клавиатуры Arduino., @Edgar Bonet


1

Наконец-то я нашел решение своей проблемы. Я написал алгоритм, который автоматически меняет язык ввода системы, если языков всего два и один из них английский. Этот код написан на ярлыках Duckduino, но конвертировать обратно не проблема.

DELAY 1000

GUI r
DELAY 1000
STRING powershell
ENTER
DELAY 1000
STRING "ok"
ENTER
DELAY 1000
STRING Set-WinUserLanguageList -LanguageList en-US, ru -Force
ENTER
DELAY 1000
STRING exit
ENTER
DELAY 1000

ALT SHIFT
DELAY 1000
GUI r
DELAY 1000
STRING powershell
ENTER
DELAY 1000
STRING "ok"
ENTER
DELAY 1000
STRING Set-WinUserLanguageList -LanguageList ru, en-US -Force
ENTER
DELAY 1000
ALT SHIFT
DELAY 1000
STRING exit
ENTER
DELAY 1000

GUI r
DELAY 1000
STRING powershell
ENTER
DELAY 1000
STRING "ENGLISH"
ENTER
DELAY 1000

Вы можете использовать для ru другой язык, для "ok" я хочу добавить Get-WinUserLanguageList | ConvertTo-Json | Out-File C:\WinUserLanguageList.json, чтобы сохранить список пользователей.

Если язык отличается от английского, этот код делает ошибки, и если язык правильный, он меняет список языков, вот как это работает!

Обновление:

DELAY 1000

GUI r
DELAY 1000
STRING powershell
ENTER
DELAY 1000
STRING Get-WinUserLanguageList | ConvertTo-Json | Out-File C:\WinUserLanguageList.json
ENTER
DELAY 1000
STRING Set-WinUserLanguageList -LanguageList en-US, ru -Force
ENTER
DELAY 1000
STRING exit
ENTER
DELAY 1000

ALT SHIFT
DELAY 1000
GUI r
DELAY 1000
STRING powershell
ENTER
DELAY 1000
STRING Get-WinUserLanguageList | ConvertTo-Json | Out-File C:\WinUserLanguageList.json
ENTER
DELAY 1000
STRING Set-WinUserLanguageList -LanguageList ru, en-US -Force
ENTER
DELAY 1000
ALT SHIFT
DELAY 1000
STRING exit
ENTER
DELAY 1000

GUI r
DELAY 1000
STRING powershell
ENTER
DELAY 1000
STRING "CODE IN ENGLISH"
ENTER
DELAY 1000
STRING exit
ENTER
DELAY 1000

GUI r
DELAY 1000
STRING powershell
ENTER
DELAY 1000
STRING Get-WinUserLanguageList
ENTER
DELAY 1000
STRING $importedFile = Get-Content C:\WinUserLanguageList.json | ConvertFrom-Json
ENTER
DELAY 1000
STRING $langCollection = New-Object System.Collections.Generic.List[Microsoft.InternationalSettings.Commands.WinUserLanguage]
ENTER
DELAY 1000
STRING foreach ($item in $importedFile) {
ENTER
DELAY 1000
STRING $lang = [Microsoft.InternationalSettings.Commands.WinUserLanguage]::new($item.LanguageTag)
ENTER
DELAY 1000
STRING $lang.InputMethodTips.Clear()
ENTER
DELAY 1000
STRING foreach ($inputMethod in $item.InputMethodTips) {
ENTER
DELAY 1000
STRING $lang.InputMethodTips.Add($inputMethod) }
ENTER
DELAY 1000
STRING $lang.Handwriting = $item.Handwriting
ENTER
DELAY 1000
STRING $lang.Spellchecking = $item.Spellchecking
ENTER
DELAY 1000
STRING $langCollection += $lang }
ENTER
DELAY 1000
STRING Set-WinUserLanguageList $langCollection -Force
ENTER
DELAY 1000
STRING Remove-Item C:\WinUserLanguageList.json
ENTER
DELAY 1000
STRING exit
ENTER
DELAY 1000

GUI r
DELAY 1000
STRING https://ma.kak.si
ENTER
,