Раскладка клавиатуры в окне DOS

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Раскладка клавиатуры в окне DOS

Post by Lavr »

Столкнулся неожиданно с проблемой раскладок клавиатуры в окне DOS...
Виндавоз, если не настроен по-другому, запоминает раскладку RU/EN
для различных открытых окон. Но для окна DOS всегда выдаёт RU и не
меняет её по штатному переключателю [RU/EN].

Я, конечно, понимаю, что в окне DOS за раскладку отвечает драйвер
DOS
, но этого не понимают виртуальные клавиатуры, которые при работе
с окном DOS включаются в русскую раскладку, что не даёт ими пользоваться.

Image

Я знаю, какой функцией АПИ делается запрос раскладки у окна Винды, но
получается, что окно DOS всегда отвечает, что оно [RU] и изменить это
средствами Винды не получается. :(

Как бы разрешить или обойти эту траблу?
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Re: Раскладка клавиатуры в окне DOS

Post by HardWareMan »

Lavr wrote:Как бы разрешить или обойти эту траблу?
ЕМНИП, в DOS боксе винды (command/cmd) переключение раскладок идет на отличных от виндовоза клавишах. Толи левый/правый шифты, толи левый/правый контрол+шифт... Но на такие грабли наступал, ага.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Раскладка клавиатуры в окне DOS

Post by Lavr »

HardWareMan wrote:в DOS боксе винды (command/cmd) переключение раскладок идет на отличных от виндовоза клавишах.
Толи левый/правый шифты, толи левый/правый контрол+шифт...
Это только в том случае, если загружается KEYBOARD.SYS при
загрузке (оно потом копируется в другой файл для параметров
DOS бокс).

К примеру так:

Code: Select all

keyb ru,,c:\sys\keyboard.sys
Эти клавиши я знаю и KEYB.COM никогда не гружу, т.к. неудобен.
Но я сильно в сомнениях, что KEYB.COM способен указывать Венде
текущую раскладку окна
.
На мой взгляд, это такой-же драйвер уровня DOS, как и, скажем,
KEYRUS.

Под DOS бокс я подобрал другой драйвер, который имеет
переключение раскладок на клавишах, идентичных Виндовозу,
Alt+Shift, но мне кажется, дрова DOS не могут изменить
раскладку, понятную программам Венды - для них она выдаёт
ту раскладку, что выбрана при установке Венды.

Но... я могу и ошибаться, хотя факт на лицо - переключатель
[RU/EN] Венды не меняет признак раскладки для окна DOS .
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Re: Раскладка клавиатуры в окне DOS

Post by HardWareMan »

Lavr wrote:Но... я могу и ошибаться, хотя факт на лицо - переключатель
[RU/EN] Венды не меняет признак раскладки для окна DOS .
Ну, это логично, ибо сеанс дос это не win32 программа, а ctfmon работает только с ними.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Раскладка клавиатуры в окне DOS

Post by Lavr »

HardWareMan wrote:
Lavr wrote:Но... я могу и ошибаться, хотя факт на лицо - переключатель
[RU/EN] Венды не меняет признак раскладки для окна DOS .
Ну, это логично, ибо сеанс дос это не win32 программа, а ctfmon работает только с ними.
Наверное, всё ж internat.exe? ctfmon у меня под Вендой_98 просто отсутствует, как факът...

Но как ни крути - Сеанс MS-DOS - это всё ж процесс, что ж тогда делает метод
GetKeyboardLayout(), который должен вернуть информацию о кодовой странице?
http://msdn.microsoft.com/en-us/library/ms646296
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Re: Раскладка клавиатуры в окне DOS

Post by HardWareMan »

Lavr wrote:Наверное, всё ж internat.exe? ctfmon у меня под Вендой_98 просто отсутствует, как факът...
А, точно. В 9х = интернат, в 2к и ХР - ктрфмон. В 7 и виста хз чо, свое что-то. Я помню для 98й был драйвер казахского языка. Он заменял internat.exe на internak.exe, чтобы иметь флажок [KZ] в трее...
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Вообще говоря, ситуация несколько странная, поскольку, согласно всем авторитетным источникам,
[Сеанс MS-DOS] (MS-DOS Prompt) - "это специальное служебное приложение Windows,
позволяющее открыть на рабочем столе окно, в котором можно запускать некоторые приложения MS DOS
".

Я проверил, но internat.exe не меняет раскладку и у консольных приложений Венды.
Но есть примеры, когда свойства окна консольного приложения
можно поменять, как и у обычного окна Венды, в частности, сделать "серой" кнопку [X].
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Если я правильно понимаю механизм - internat.exe посылает сообщение соответствующему
активному окну. Окно должно переключить раскладку, то есть воспринимать входящий поток
от УВ в иной кодировке.
internat.exe, если получил ответ на мессагу, фиксирует где-то текущую раскладку для
конкретного окна и меняет свой значок соответственно.

Вобщем-то "Сеанс MS-DOS" это обычное дочернее окно класса ttyGrab, и принадлежит
процессу winoa386.mod. У внешнего, того, которое имеет заголовок, класс tty.
Внутри этого окна располагается панель инструментов и само дочернее окно, представляющее
собой, собственно, рабочую область консоли.

Я не вижу причин почему бы им не уметь получать сообщение о смене раскладки
клавиатуры.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Пути Мелкомягких неисповедимы...
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Немного я поразбирался "где тут собака порыта" :wink: и выяснил вот что...

Сначала у меня была мысль, что раскладка не преключается у приложений
Венды, которые явно не имеют ввода. И такое древнее убогое приложение
у меня нашлось. Оно только молотит математику и выводит на экран, раз
в цикле, давая произойти событиям Виндоуз, чтобы среагировать на кнопку
закрытия окна [X].

Image

Но нет! Такое окно реагирует на переключение раскладок успешно.

А вот второй пример - оправдал себя на 200 процентов. Это чисто консольное
приложение Венды
, которое валялось в наборе примеров программирования.

Image

На рисунке видно, что на предложение "Y"/"N" из приложения выйти нельзя,
поскольку раскладка клавиатуры у него автоматически и принудительно
установлена как [RU] и переключить её ни с клавиатуры, ни через иконку
internat.exe невозможно.

Я приложил само консольное приложение:
http://www.nedopc.org/nedopc/upload/master_0.zip
у кого есть возможность - попробуйте под Вендой_ХР. Интересно - как там
с переключением раскладки клавиатуры у консольных приложений? И как в
принципе обстоит вопрос с переключением в консолях
?

Хардыч, а как internat.exe или ctfmon.exe влияет на FAR - он же косольное приложение?
Last edited by Lavr on 14 Jul 2011 15:10, edited 1 time in total.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Возникла ещё одна мысль, а может internat.exe и не пробует сменить раскладку для консольных приложений?

Вот тут меня цитата смутила...
Punto Switcher поддерживает только Windows-программы. В случае DOS-приложений меняется текущая раскладка эмулятора DOS, но не самой DOS-программы. Punto Switcher не поддерживает DOS-приложения.
http://punto.yandex.ru/faq.xml

А это в принципе то, что мне и надо! Сейчас попробую проверить...
Хоть и не люблю я разные "услужливые свитчеры"... :-?
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Феноменально работает Венда 98 с переключением раскладок консольного приложения!!! :o

Поставил я RusLat95 - Альтернативный переключатель раскладок, чтобы на internat.exe
не грешить. Тем более, что автор обещает переключать всё и везде, а в Интернете
программу хвалят...

Запускаю предыдущее консольное приложение Master и вдруг оно начинает работать!!! :o
Переключилась, значит, раскладка!!! :o

Ну, думаю - Йез!, перегружаю машину и начинаю работать с приложениями DOS... Перегружаюсь -
запускаю приложение DOS... НЕ РАБОТАЕТ ПЕРЕКЛЮЧЕНИЕ РАСКЛАДКИ!!! :(

Возвращаюсь к консольному приложению Master - тоже НЕ РАБОТАЕТ ПЕРЕКЛЮЧЕНИЕ!!!
Перекомпилировал его, чтоб видеть явно символы с клавиатуры - прут русские...
на переключение плевать хотели... :(

Ну - ЗОГАТКА!!! Начал танцы с бубнами... вдруг заработало... но RusLat95 явно в этом не
виноват... а кто? Обнаружил вредителя...

Консольное приложение Венды 98 сохраняет раскладку того окна, из которого оно было запущено!!! :o

Я запускал из "Проводника" - так вот если у него раскладка [RU] - у консольного весь ввод
идёт в RU переключиться ничем не заставишь...и наоборот, если "Проводник" в [EN], так
EN будет у консольного окна, и никакого RU...

Весьма неожиданный результат... что ж... осталось попробовать, на что способен Punto Switcher...
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Lavr wrote:Хардыч, а как internat.exe или ctfmon.exe влияет на FAR - он же косольное приложение?
Не следует путать консольное WIN32 приложение и DOS приложение, работающее, как ты уже сказал, под сеансом MS-DOS. Фара переключается везде и нормально.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

HardWareMan wrote:
Lavr wrote:Хардыч, а как internat.exe или ctfmon.exe влияет на FAR - он же косольное приложение?
Не следует путать консольное WIN32 приложение и DOS приложение, работающее, как ты уже сказал, под сеансом MS-DOS. Фара переключается везде и нормально.
А никто и не путает - я отдельно проверяю всё на приложении DOS,
работающим под сеансом MS-DOS и на консольном WIN32 приложении -
это игрушка Master.

То есть FAR четко переключает раскладку по [RU/EN] Венды из трея?
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Lavr wrote:То есть FAR четко переключает раскладку по [RU/EN] Венды из трея?
Тока что проверил в ХР - да. Все четко, даже если переключать мышей.