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

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

Moderator: Shaos

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

Post by Lavr »

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

Хардыч, ну чтоб уж закрыть тему - посмотри у себя, как реагирует на
консольное WIN32 приложение и DOS приложение, работающее под
сеансом MS-DOS
вот эта виртуальная клава:
http://romb.hut2.ru/MOSK_Keyboard.zip
из
http://romb.hut2.ru/virt_k.htm#4
возможно, это её глюки? Если тебя сильно не затруднит...

Она должна выставлять на себе раскладку, соответствующую раскладке активного окна.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

В общем итог всех "танцев с бубнами" для Венды_98 следующий:

Для DOS приложение, работающего под "Сеансом MS-DOS", Венда_98 выставляет язык и раскладку, назначенные в системе по умолчанию.
Изменить это через [RU/EN] Венды из трея невозможно.

Для консольного WIN32 приложения Венда_98 также выставляет язык и раскладку, назначенные в системе по умолчанию.
Но тут есть отличие: реальный ввод с клавиатуры зависит от того, из какого приложения само консольное WIN32 приложение было запущено.

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

Изменить это через [RU/EN] Венды из трея также невозможно.

Так что я частично решил свою проблему - выставил раскладку по умолчанию в [EN] и в "Сеансах MS-DOS" теперь виртуальная клавиатура сугубо с английским раскладом.
Но так работать можно...
:wink:

Блин, Венда до того недокументированная система, особенно сам "Сеанс MS-DOS", что поковыряться было даже интересно...
Но вопросов всегда остаётся больше, чем ответов.
bar
Senior
Posts: 185
Joined: 07 Aug 2006 10:18

Post by bar »

Я знаю, что консоль MS-DOS в венде, это какое-то очень специальное окно, которое чуть ли не в ядре реализовано. Но и всё же, а нельзя ли просто отправлять этому окну то, что хочется, и не париться? Ну, русские буквы, вперемешку с английскими. Каким-нибудь там SendMessage, с параметром, например, WM_CHAR...

А, хм, нельзя. Загуглил в мсдн, там есть WM_CHAR -- это key-release-event декодированный в char, чего маловато, поскольку хочется, как я думаю, и keyup, и keydown эвенты отсылать. А WM_KEYUP/KEYDOWN -- это именно коды клавиш, и коды клавиши в русской раскладке ничем не отличаются от кода той же клавиши в английской. Это коды физических клавиш. То есть тупо перехватить весь клавиатурный ввод и перекодировать его в последовательность событий той раскладки какой хочется -- не выйдет. То есть вся эта груда кода, начиная с драйвера клавиатуры и выше вплоть до win32api, весь этот код, который избавляет прикладное приложение от работы с портами ввода/вывода и обработки исключений, на самом деле абсолютно бесполезная груда кода, которая нихрена не делает. Эта груда кода не повышает уровень абстракции от железа. В скан-кодах физических клавиш я мыслил о клавиатуре когда программы под дос на ассемблере писал. Во всех остальных местах, если я и имел дело с кодами клавиш, то коды эти были уже проявлением более высокого уровня абстракции, речь шла о "виртуальных" клавишах, и если посчитать количество разных кодов, которые прилетают с клавиатуры, то запросто можно было бы придти к выводу, что на клавиатуре сотни клавиш. Если учесть японский и китайских "алфавиты", то может быть даже и тысячи.
Нет, ну вот каждый взгляд на венду, обязательно ставит передо мной вопрос: как можно было написать такую дебильную систему?
Блин, Венда до того недокументированная система, особенно сам "Сеанс MS-DOS", что поковыряться было даже интересно...
Но вопросов всегда остаётся больше, чем ответов.
Я бы на месте MS, тоже бы постыдился такое документировать. Я бы даже msdn, в котором я только что выяснил про вендовые сообщения с клавиатуры, даже msdn я бы постыдился создавать.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

bar wrote:Я знаю, что консоль MS-DOS в венде, это какое-то очень специальное окно, которое чуть ли не в ядре реализовано.
...
Блин, Венда до того недокументированная система, особенно сам "Сеанс MS-DOS", что поковыряться было даже интересно...
Но вопросов всегда остаётся больше, чем ответов.
Я бы на месте MS, тоже бы постыдился такое документировать. Я бы даже msdn, в котором я только что выяснил про вендовые сообщения с клавиатуры, даже msdn я бы постыдился создавать.
Да нет - окно вобщем-то обычное, я здесь уже писАл, что это за окно...
Другое дело, что на уровне ядра может работать ЭМУЛЯТОР MS-DOS!
Вот это интересно - свойства этого эмулятора замазаны и упрятаны... и даже слово ЭМУЛЯТОР не произносится...

А когда мы в этом ЭМУЛЯТОРе запускаем ЭМУЛЯТОР i8080 или Z80 так это ж ЭМУЛЯТОР^2 ! И работает ведь! :lol:
И потом, Билл один из первых эмуляторщиков - он свой первый Васюк писал под эмулятором i8080 на PDP.

Так что, я думаю, стесняться тут особо нечего, а вот убрать "тень с плетеня" было бы весьма неплохо...
Ну подумаешь - ЭМУЛЯТОР MS-DOS в составе Венды, что такого...

PS. А вот насчёт msdn - я, пожалуй, соглашусь. Это очень хороший пример, как люди обленились сделать внятный хелп и решили заработать денег на слабоупорядоченной кучке... информации.

PPS. А так 2 дня приходится ковырять интернет, чтобы найти то, что надо, хорошо, что он есть... :wink:
bar
Senior
Posts: 185
Joined: 07 Aug 2006 10:18

Post by bar »

А всякие-там dosbox'ы в win'9x медленнее чем встроенный эмулятор, или нет?
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

bar wrote:А всякие-там dosbox'ы в win'9x медленнее чем встроенный эмулятор, или нет?
Извини, я ни разу не пользовался dosbox под win'9x. На работе - использую под ХР вынужденно - но там Коре Дуо 2Гиг - быстрая машина. Наоборот тормозить приходится...
bar wrote:А, хм, нельзя. Загуглил в мсдн, там есть WM_CHAR -- это key-release-event декодированный в char, чего маловато, поскольку хочется, как я думаю, и keyup, и keydown эвенты отсылать. А WM_KEYUP/KEYDOWN -- это именно коды клавиш, и коды клавиши в русской раскладке ничем не отличаются от кода той же клавиши в английской. Это коды физических клавиш. То есть тупо перехватить весь клавиатурный ввод и перекодировать его в последовательность событий той раскладки какой хочется -- не выйдет. То есть вся эта груда кода, начиная с драйвера клавиатуры и выше вплоть до win32api, весь этот код, который избавляет прикладное приложение от работы с портами ввода/вывода и обработки исключений, на самом деле абсолютно бесполезная груда кода, которая нихрена не делает. Эта груда кода не повышает уровень абстракции от железа. В скан-кодах физических клавиш я мыслил о клавиатуре когда программы под дос на ассемблере писал. Во всех остальных местах, если я и имел дело с кодами клавиш, то коды эти были уже проявлением более высокого уровня абстракции, речь шла о "виртуальных" клавишах, и если посчитать количество разных кодов, которые прилетают с клавиатуры, то запросто можно было бы придти к выводу, что на клавиатуре сотни клавиш. Если учесть японский и китайских "алфавиты", то может быть даже и тысячи.
Нет, ну вот каждый взгляд на венду, обязательно ставит передо мной вопрос: как можно было написать такую дебильную систему?
Я вспомнил одну забавную реплику:
viewtopic.php?t=9554
bar wrote:Но я вот не могу даже предположить, что собственно мне надо. По-моему, ничего.
Я встрял в разговор, исключительно из любви к бесцельному флуду.
Ну шутки у меня такие... :D
http://tmp.misa.ac.ru/w95exit.html wrote:Отец Выньдоуз подговорил Комманда Кома, чтобы он всегда его
приводил, а сам уходил. Только Командир Нортон не сдавался. Уви-
дит отца Выньдоуза и говорит ему: "А я тебя не пущу, оболочка де-
шевая!" И остаются вдвоем с Коммандом Комом, пока Командир Нортон
не уйдет. А когда отец Выньдоуз видел Командира Нортона, он гнусно
ругался. В ответ на это Командир Нортон спокойно отвечал: "Опера-
ционная система - это DOS 7.0. А ты, отец Выньдоуз, - оболочка де-
шевая!"
bar
Senior
Posts: 185
Joined: 07 Aug 2006 10:18

Post by bar »

Lavr wrote:Я вспомнил одну забавную реплику:
viewtopic.php?t=9554
bar wrote:Но я вот не могу даже предположить, что собственно мне надо. По-моему, ничего.
Я встрял в разговор, исключительно из любви к бесцельному флуду.
Ну шутки у меня такие... :D
Не, сейчас я встрял просто потому, что подумал: если переключатель раскладок в венде такой тупой, почему бы не написать более умный. Но беглое исследование родило устойчивое подозрение, что вендовый переключатель -- самая умная из возможных реализаций переключателя в венде.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

bar wrote:Не, сейчас я встрял просто потому, что подумал: если переключатель раскладок в венде такой тупой, почему бы не написать более умный. Но беглое исследование родило устойчивое подозрение, что вендовый переключатель -- самая умная из возможных реализаций переключателя в венде.
Ну совсем тупым его не назвать, поскольку некоторая логика просматривается... Да и в ХР команда БГ логику свою подправила, судя по всему... Ну а потом основная мысль была понятна сразу - зацепить всех на крючок Венды, подсунув какой-никакой но эмулятор MS-DOS, а потом без шума от MS-DOS избавиться.

Говорят, что и слово ЭМУЛЯТОР сначала звучало
http://tmp.misa.ac.ru/w95exit.html
но потом незаметно сошло на нет...

Ну а докопаться до мотиваций M$ порой даже весьма интересно: вывод получается иногда такой - да ведь они не виноваты... они "хотели как лучше"... они потворствовали нашим многочисленным "гнусным" привычкам - вот и получилось то, что есть... :wink:

Другое дело, что они норовят всё упрятать под сурдинку... :(
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: консоль MS-DOS

Post by Lavr »

bar wrote:Я знаю, что консоль MS-DOS в венде, это какое-то очень специальное окно, которое чуть ли не в ядре реализовано.
... ну вот каждый взгляд на венду, обязательно ставит передо мной вопрос: как можно было написать такую дебильную систему?
В очередной раз я попытался узнать побольше информации про "консоль MS-DOS в венде" особенно
про её специфику в полнооконном режиме.
Этот наш топик тоже Гугл мне вываливает... но есть и кое-что интересное:
Какую роль играла MS-DOS в составе Windows? (дубликат есть на Хабре) - весьма подробная и интересная статья.
Хотя, в основном просто познаватльная, без прикладных моментов...

И вот еще: Почему Spy ++ не работает с консольными окнами
Окно консоли относится к процессу CSRSS, а не к процессу CMD.EXE. CSRSS - это критически важная системная служба, которая защищена и не может быть подключена без специальных привилегий для отладки.

"Когда процесс пользовательского режима вызывает функцию с участием окна консоли, создание процессов/потоков, или бок о боке поддержки, вместо выдачи системного вызова, библиотек Win32 (kernel32.dll, user32.dll, gdi32.dll) отправить вызов межпроцессного процессу CSRSS, который делает большую часть фактической работы без ущерба для ядра. "
Коряво несколько... но хоть что-то... :wink:
iLavr