|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Раскладка клавиатуры в окне DOS
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Столкнулся неожиданно с проблемой раскладок клавиатуры в окне DOS...
Виндавоз, если не настроен по-другому, запоминает раскладку RU/EN
для различных открытых окон. Но для окна DOS всегда выдаёт RU и не
меняет её по штатному переключателю [RU/EN].
Я, конечно, понимаю, что в окне DOS за раскладку отвечает драйвер DOS, но этого не понимают виртуальные клавиатуры, которые при работе
с окном DOS включаются в русскую раскладку, что не даёт ими пользоваться.
Я знаю, какой функцией АПИ делается запрос раскладки у окна Винды, но
получается, что окно DOS всегда отвечает, что оно [RU] и изменить это
средствами Винды не получается.
Как бы разрешить или обойти эту траблу?
|
13 Jul 2011 02:57 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
ЕМНИП, в DOS боксе винды (command/cmd) переключение раскладок идет на отличных от виндовоза клавишах. Толи левый/правый шифты, толи левый/правый контрол+шифт... Но на такие грабли наступал, ага.
|
13 Jul 2011 03:30 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Это только в том случае, если загружается KEYBOARD.SYS при
загрузке (оно потом копируется в другой файл для параметров
DOS бокс).
К примеру так:
Эти клавиши я знаю и KEYB.COM никогда не гружу, т.к. неудобен.
Но я сильно в сомнениях, что KEYB.COM способен указывать Венде текущую раскладку окна.
На мой взгляд, это такой-же драйвер уровня DOS, как и, скажем,
KEYRUS.
Под DOS бокс я подобрал другой драйвер, который имеет
переключение раскладок на клавишах, идентичных Виндовозу,
Alt+Shift, но мне кажется, дрова DOS не могут изменить
раскладку, понятную программам Венды - для них она выдаёт
ту раскладку, что выбрана при установке Венды.
Но... я могу и ошибаться, хотя факт на лицо - переключатель
[RU/EN] Венды не меняет признак раскладки для окна DOS .
|
13 Jul 2011 04:12 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Ну, это логично, ибо сеанс дос это не win32 программа, а ctfmon работает только с ними.
|
13 Jul 2011 06:15 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Наверное, всё ж internat.exe? ctfmon у меня под Вендой_98 просто отсутствует, как факът...
Но как ни крути - Сеанс MS-DOS - это всё ж процесс, что ж тогда делает метод
GetKeyboardLayout(), который должен вернуть информацию о кодовой странице?
http://msdn.microsoft.com/en-us/library/ms646296
|
13 Jul 2011 07:02 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
А, точно. В 9х = интернат, в 2к и ХР - ктрфмон. В 7 и виста хз чо, свое что-то. Я помню для 98й был драйвер казахского языка. Он заменял internat.exe на internak.exe, чтобы иметь флажок [KZ] в трее...
|
13 Jul 2011 08:36 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Вообще говоря, ситуация несколько странная, поскольку, согласно всем авторитетным источникам,
[Сеанс MS-DOS] (MS-DOS Prompt) - "это специальное служебное приложение Windows, позволяющее открыть на рабочем столе окно, в котором можно запускать некоторые приложения MS DOS".
Я проверил, но internat.exe не меняет раскладку и у консольных приложений Венды.
Но есть примеры, когда свойства окна консольного приложения
можно поменять, как и у обычного окна Венды, в частности, сделать "серой" кнопку [X].
|
13 Jul 2011 14:10 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Если я правильно понимаю механизм - internat.exe посылает сообщение соответствующему
активному окну. Окно должно переключить раскладку, то есть воспринимать входящий поток
от УВ в иной кодировке.
internat.exe, если получил ответ на мессагу, фиксирует где-то текущую раскладку для
конкретного окна и меняет свой значок соответственно.
Вобщем-то "Сеанс MS-DOS" это обычное дочернее окно класса ttyGrab, и принадлежит
процессу winoa386.mod. У внешнего, того, которое имеет заголовок, класс tty.
Внутри этого окна располагается панель инструментов и само дочернее окно, представляющее
собой, собственно, рабочую область консоли.
Я не вижу причин почему бы им не уметь получать сообщение о смене раскладки
клавиатуры.
|
14 Jul 2011 03:58 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Пути Мелкомягких неисповедимы...
|
14 Jul 2011 05:01 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Немного я поразбирался " где тут собака порыта" и выяснил вот что...
Сначала у меня была мысль, что раскладка не преключается у приложений
Венды, которые явно не имеют ввода. И такое древнее убогое приложение
у меня нашлось. Оно только молотит математику и выводит на экран, раз
в цикле, давая произойти событиям Виндоуз, чтобы среагировать на кнопку
закрытия окна [X].
Но нет! Такое окно реагирует на переключение раскладок успешно.
А вот второй пример - оправдал себя на 200 процентов. Это чисто консольное приложение Венды, которое валялось в наборе примеров программирования.
На рисунке видно, что на предложение "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.
|
14 Jul 2011 09:24 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Возникла ещё одна мысль, а может internat.exe и не пробует сменить раскладку для консольных приложений?
Вот тут меня цитата смутила...
http://punto.yandex.ru/faq.xml
А это в принципе то, что мне и надо! Сейчас попробую проверить...
Хоть и не люблю я разные "услужливые свитчеры"...
|
14 Jul 2011 10:29 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Феноменально работает Венда 98 с переключением раскладок консольного приложения!!!
Поставил я RusLat95 - Альтернативный переключатель раскладок, чтобы на internat.exe
не грешить. Тем более, что автор обещает переключать всё и везде, а в Интернете
программу хвалят...
Запускаю предыдущее консольное приложение Master и вдруг оно начинает работать!!!
Переключилась, значит, раскладка!!!
Ну, думаю - Йез!, перегружаю машину и начинаю работать с приложениями DOS... Перегружаюсь -
запускаю приложение DOS... НЕ РАБОТАЕТ ПЕРЕКЛЮЧЕНИЕ РАСКЛАДКИ!!!
Возвращаюсь к консольному приложению Master - тоже НЕ РАБОТАЕТ ПЕРЕКЛЮЧЕНИЕ!!!
Перекомпилировал его, чтоб видеть явно символы с клавиатуры - прут русские...
на переключение плевать хотели...
Ну - ЗОГАТКА!!! Начал танцы с бубнами... вдруг заработало... но RusLat95 явно в этом не
виноват... а кто? Обнаружил вредителя...
Консольное приложение Венды 98 сохраняет раскладку того окна, из которого оно было запущено!!!
Я запускал из "Проводника" - так вот если у него раскладка [RU] - у консольного весь ввод
идёт в RU переключиться ничем не заставишь...и наоборот, если "Проводник" в [EN], так
EN будет у консольного окна, и никакого RU...
Весьма неожиданный результат... что ж... осталось попробовать, на что способен Punto Switcher...
|
14 Jul 2011 14:10 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Не следует путать консольное WIN32 приложение и DOS приложение, работающее, как ты уже сказал, под сеансом MS-DOS. Фара переключается везде и нормально.
|
14 Jul 2011 20:43 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А никто и не путает - я отдельно проверяю всё на приложении DOS,
работающим под сеансом MS-DOS и на консольном WIN32 приложении -
это игрушка Master.
То есть FAR четко переключает раскладку по [RU/EN] Венды из трея?
|
15 Jul 2011 03:11 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Тока что проверил в ХР - да. Все четко, даже если переключать мышей.
|
15 Jul 2011 03:48 |
|
|
Who is online |
Users browsing this forum: No registered users and 1 guest |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|