|
nedoPC.orgCommunity for electronics hobbyists, established in 2002 |
|
Last visit was: 10 Nov 2024 12:50
|
It is currently 10 Nov 2024 12:50
|
Раскладка клавиатуры в окне DOS
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Видимо я борюсь с родимыми глюками Венды_98...
Хардыч, ну чтоб уж закрыть тему - посмотри у себя, как реагирует на
консольное WIN32 приложение и DOS приложение, работающее под сеансом MS-DOS вот эта виртуальная клава:
http://romb.hut2.ru/MOSK_Keyboard.zip
из
http://romb.hut2.ru/virt_k.htm#4
возможно, это её глюки? Если тебя сильно не затруднит...
Она должна выставлять на себе раскладку, соответствующую раскладке активного окна.
|
15 Jul 2011 04:06 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В общем итог всех "танцев с бубнами" для Венды_98 следующий:
Для DOS приложение, работающего под "Сеансом MS-DOS", Венда_98 выставляет язык и раскладку, назначенные в системе по умолчанию.
Изменить это через [RU/EN] Венды из трея невозможно.
Для консольного WIN32 приложения Венда_98 также выставляет язык и раскладку, назначенные в системе по умолчанию.
Но тут есть отличие: реальный ввод с клавиатуры зависит от того, из какого приложения само консольное WIN32 приложение было запущено.
Если у него раскладка [RU] - у консольного весь реальный ввод идёт в RU переключиться ничем не заставишь...и наоборот, если - [EN], так EN будет у консольного окна, и никакого RU...
Изменить это через [RU/EN] Венды из трея также невозможно.
Так что я частично решил свою проблему - выставил раскладку по умолчанию в [EN] и в "Сеансах MS-DOS" теперь виртуальная клавиатура сугубо с английским раскладом. Но так работать можно...
Блин, Венда до того недокументированная система, особенно сам "Сеанс MS-DOS", что поковыряться было даже интересно...
Но вопросов всегда остаётся больше, чем ответов.
|
15 Jul 2011 07:29 |
|
|
bar
Senior
Joined: 07 Aug 2006 10:18 Posts: 185
|
Я знаю, что консоль MS-DOS в венде, это какое-то очень специальное окно, которое чуть ли не в ядре реализовано. Но и всё же, а нельзя ли просто отправлять этому окну то, что хочется, и не париться? Ну, русские буквы, вперемешку с английскими. Каким-нибудь там SendMessage, с параметром, например, WM_CHAR...
А, хм, нельзя. Загуглил в мсдн, там есть WM_CHAR -- это key-release-event декодированный в char, чего маловато, поскольку хочется, как я думаю, и keyup, и keydown эвенты отсылать. А WM_KEYUP/KEYDOWN -- это именно коды клавиш, и коды клавиши в русской раскладке ничем не отличаются от кода той же клавиши в английской. Это коды физических клавиш. То есть тупо перехватить весь клавиатурный ввод и перекодировать его в последовательность событий той раскладки какой хочется -- не выйдет. То есть вся эта груда кода, начиная с драйвера клавиатуры и выше вплоть до win32api, весь этот код, который избавляет прикладное приложение от работы с портами ввода/вывода и обработки исключений, на самом деле абсолютно бесполезная груда кода, которая нихрена не делает. Эта груда кода не повышает уровень абстракции от железа. В скан-кодах физических клавиш я мыслил о клавиатуре когда программы под дос на ассемблере писал. Во всех остальных местах, если я и имел дело с кодами клавиш, то коды эти были уже проявлением более высокого уровня абстракции, речь шла о "виртуальных" клавишах, и если посчитать количество разных кодов, которые прилетают с клавиатуры, то запросто можно было бы придти к выводу, что на клавиатуре сотни клавиш. Если учесть японский и китайских "алфавиты", то может быть даже и тысячи.
Нет, ну вот каждый взгляд на венду, обязательно ставит передо мной вопрос: как можно было написать такую дебильную систему?
Я бы на месте MS, тоже бы постыдился такое документировать. Я бы даже msdn, в котором я только что выяснил про вендовые сообщения с клавиатуры, даже msdn я бы постыдился создавать.
|
15 Jul 2011 12:23 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да нет - окно вобщем-то обычное, я здесь уже писАл, что это за окно...
Другое дело, что на уровне ядра может работать ЭМУЛЯТОР MS-DOS!
Вот это интересно - свойства этого эмулятора замазаны и упрятаны... и даже слово ЭМУЛЯТОР не произносится...
А когда мы в этом ЭМУЛЯТОРе запускаем ЭМУЛЯТОР i8080 или Z80 так это ж ЭМУЛЯТОР^2 ! И работает ведь!
И потом, Билл один из первых эмуляторщиков - он свой первый Васюк писал под эмулятором i8080 на PDP.
Так что, я думаю, стесняться тут особо нечего, а вот убрать "тень с плетеня" было бы весьма неплохо...
Ну подумаешь - ЭМУЛЯТОР MS-DOS в составе Венды, что такого...
PS. А вот насчёт msdn - я, пожалуй, соглашусь. Это очень хороший пример, как люди обленились сделать внятный хелп и решили заработать денег на слабоупорядоченной кучке... информации.
PPS. А так 2 дня приходится ковырять интернет, чтобы найти то, что надо, хорошо, что он есть...
|
15 Jul 2011 13:03 |
|
|
bar
Senior
Joined: 07 Aug 2006 10:18 Posts: 185
|
А всякие-там dosbox'ы в win'9x медленнее чем встроенный эмулятор, или нет?
|
15 Jul 2011 13:50 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Извини, я ни разу не пользовался dosbox под win'9x. На работе - использую под ХР вынужденно - но там Коре Дуо 2Гиг - быстрая машина. Наоборот тормозить приходится... | | | | bar wrote: А, хм, нельзя. Загуглил в мсдн, там есть WM_CHAR -- это key-release-event декодированный в char, чего маловато, поскольку хочется, как я думаю, и keyup, и keydown эвенты отсылать. А WM_KEYUP/KEYDOWN -- это именно коды клавиш, и коды клавиши в русской раскладке ничем не отличаются от кода той же клавиши в английской. Это коды физических клавиш. То есть тупо перехватить весь клавиатурный ввод и перекодировать его в последовательность событий той раскладки какой хочется -- не выйдет. То есть вся эта груда кода, начиная с драйвера клавиатуры и выше вплоть до win32api, весь этот код, который избавляет прикладное приложение от работы с портами ввода/вывода и обработки исключений, на самом деле абсолютно бесполезная груда кода, которая нихрена не делает. Эта груда кода не повышает уровень абстракции от железа. В скан-кодах физических клавиш я мыслил о клавиатуре когда программы под дос на ассемблере писал. Во всех остальных местах, если я и имел дело с кодами клавиш, то коды эти были уже проявлением более высокого уровня абстракции, речь шла о "виртуальных" клавишах, и если посчитать количество разных кодов, которые прилетают с клавиатуры, то запросто можно было бы придти к выводу, что на клавиатуре сотни клавиш. Если учесть японский и китайских "алфавиты", то может быть даже и тысячи. Нет, ну вот каждый взгляд на венду, обязательно ставит передо мной вопрос: как можно было написать такую дебильную систему? | | | | |
Я вспомнил одну забавную реплику:http://www.nedopc.org/forum/viewtopic.php?t=9554Ну шутки у меня такие...
|
15 Jul 2011 14:24 |
|
|
bar
Senior
Joined: 07 Aug 2006 10:18 Posts: 185
|
Не, сейчас я встрял просто потому, что подумал: если переключатель раскладок в венде такой тупой, почему бы не написать более умный. Но беглое исследование родило устойчивое подозрение, что вендовый переключатель -- самая умная из возможных реализаций переключателя в венде.
|
15 Jul 2011 22:06 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну совсем тупым его не назвать, поскольку некоторая логика просматривается... Да и в ХР команда БГ логику свою подправила, судя по всему... Ну а потом основная мысль была понятна сразу - зацепить всех на крючок Венды, подсунув какой-никакой но эмулятор MS-DOS, а потом без шума от MS-DOS избавиться.
Говорят, что и слово ЭМУЛЯТОР сначала звучало
http://tmp.misa.ac.ru/w95exit.html
но потом незаметно сошло на нет...
Ну а докопаться до мотиваций M$ порой даже весьма интересно: вывод получается иногда такой - да ведь они не виноваты... они "хотели как лучше"... они потворствовали нашим многочисленным "гнусным" привычкам - вот и получилось то, что есть...
Другое дело, что они норовят всё упрятать под сурдинку...
|
16 Jul 2011 04:12 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В очередной раз я попытался узнать побольше информации про "консоль MS-DOS в венде" особенно про её специфику в полнооконном режиме. Этот наш топик тоже Гугл мне вываливает... но есть и кое-что интересное: Какую роль играла MS-DOS в составе Windows? (дубликат есть на Хабре) - весьма подробная и интересная статья. Хотя, в основном просто познаватльная, без прикладных моментов... И вот еще: Почему Spy ++ не работает с консольными окнамиКоряво несколько... но хоть что-то...
_________________ iLavr
|
20 Dec 2019 15:24 |
|
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
|
|