nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 10:38



Reply to topic  [ 24 posts ]  Go to page 1, 2  Next
Раскладка клавиатуры в окне DOS 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Столкнулся неожиданно с проблемой раскладок клавиатуры в окне DOS...
Виндавоз, если не настроен по-другому, запоминает раскладку RU/EN
для различных открытых окон. Но для окна DOS всегда выдаёт RU и не
меняет её по штатному переключателю [RU/EN].

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

Image

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

Как бы разрешить или обойти эту траблу?


13 Jul 2011 02:57
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Lavr wrote:
Как бы разрешить или обойти эту траблу?

ЕМНИП, в DOS боксе винды (command/cmd) переключение раскладок идет на отличных от виндовоза клавишах. Толи левый/правый шифты, толи левый/правый контрол+шифт... Но на такие грабли наступал, ага.


13 Jul 2011 03:30
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
HardWareMan wrote:
в DOS боксе винды (command/cmd) переключение раскладок идет на отличных от виндовоза клавишах.
Толи левый/правый шифты, толи левый/правый контрол+шифт...


Это только в том случае, если загружается KEYBOARD.SYS при
загрузке (оно потом копируется в другой файл для параметров
DOS бокс).

К примеру так:
Code:
keyb ru,,c:\sys\keyboard.sys

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

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

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


13 Jul 2011 04:12
Profile
Banned
User avatar

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

Ну, это логично, ибо сеанс дос это не win32 программа, а ctfmon работает только с ними.


13 Jul 2011 06:15
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
HardWareMan wrote:
Lavr wrote:
Но... я могу и ошибаться, хотя факт на лицо - переключатель
[RU/EN] Венды не меняет признак раскладки для окна DOS .

Ну, это логично, ибо сеанс дос это не win32 программа, а ctfmon работает только с ними.

Наверное, всё ж internat.exe? ctfmon у меня под Вендой_98 просто отсутствует, как факът...

Но как ни крути - Сеанс MS-DOS - это всё ж процесс, что ж тогда делает метод
GetKeyboardLayout(), который должен вернуть информацию о кодовой странице?
http://msdn.microsoft.com/en-us/library/ms646296


13 Jul 2011 07:02
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Lavr wrote:
Наверное, всё ж internat.exe? ctfmon у меня под Вендой_98 просто отсутствует, как факът...

А, точно. В 9х = интернат, в 2к и ХР - ктрфмон. В 7 и виста хз чо, свое что-то. Я помню для 98й был драйвер казахского языка. Он заменял internat.exe на internak.exe, чтобы иметь флажок [KZ] в трее...


13 Jul 2011 08:36
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Вообще говоря, ситуация несколько странная, поскольку, согласно всем авторитетным источникам,
[Сеанс MS-DOS] (MS-DOS Prompt) - "это специальное служебное приложение Windows,
позволяющее открыть на рабочем столе окно, в котором можно запускать некоторые приложения MS DOS
".

Я проверил, но internat.exe не меняет раскладку и у консольных приложений Венды.
Но есть примеры, когда свойства окна консольного приложения
можно поменять, как и у обычного окна Венды, в частности, сделать "серой" кнопку [X].


13 Jul 2011 14:10
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Если я правильно понимаю механизм - internat.exe посылает сообщение соответствующему
активному окну. Окно должно переключить раскладку, то есть воспринимать входящий поток
от УВ в иной кодировке.
internat.exe, если получил ответ на мессагу, фиксирует где-то текущую раскладку для
конкретного окна и меняет свой значок соответственно.

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

Я не вижу причин почему бы им не уметь получать сообщение о смене раскладки
клавиатуры.


14 Jul 2011 03:58
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Пути Мелкомягких неисповедимы...


14 Jul 2011 05:01
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Немного я поразбирался "где тут собака порыта" :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.



14 Jul 2011 09:24
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Возникла ещё одна мысль, а может internat.exe и не пробует сменить раскладку для консольных приложений?

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

http://punto.yandex.ru/faq.xml

А это в принципе то, что мне и надо! Сейчас попробую проверить...
Хоть и не люблю я разные "услужливые свитчеры"... :-?


14 Jul 2011 10:29
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Феноменально работает Венда 98 с переключением раскладок консольного приложения!!! :o

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

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

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

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

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

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

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

Весьма неожиданный результат... что ж... осталось попробовать, на что способен Punto Switcher...


14 Jul 2011 14:10
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Lavr wrote:
Хардыч, а как internat.exe или ctfmon.exe влияет на FAR - он же косольное приложение?

Не следует путать консольное WIN32 приложение и DOS приложение, работающее, как ты уже сказал, под сеансом MS-DOS. Фара переключается везде и нормально.


14 Jul 2011 20:43
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
HardWareMan wrote:
Lavr wrote:
Хардыч, а как internat.exe или ctfmon.exe влияет на FAR - он же косольное приложение?

Не следует путать консольное WIN32 приложение и DOS приложение, работающее, как ты уже сказал, под сеансом MS-DOS. Фара переключается везде и нормально.

А никто и не путает - я отдельно проверяю всё на приложении DOS,
работающим под сеансом MS-DOS и на консольном WIN32 приложении -
это игрушка Master.

То есть FAR четко переключает раскладку по [RU/EN] Венды из трея?


15 Jul 2011 03:11
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Lavr wrote:
То есть FAR четко переключает раскладку по [RU/EN] Венды из трея?

Тока что проверил в ХР - да. Все четко, даже если переключать мышей.


15 Jul 2011 03:48
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 24 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: newold86 and 20 guests


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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.