Можно ли сэмулировать нажатие сочетания клавиш в DOS-е?

Описания, советы, ремонт, эксплуатация старых IBM PC-совместимых ПК
Ответить
Аватара пользователя
sanders
Advanced Member
Сообщения: 9377
Зарегистрирован: 26.03.2008,14:47
Откуда: Санкт-Петербург

Вклад в сообщество

Можно ли сэмулировать нажатие сочетания клавиш в DOS-е?

Сообщение sanders » 02.12.2018,22:02

Смысл в том, что некий древний ноутбук не запоминает после перезагрузки настройку яркости DSTN-экрана. Чтоб ее вывести на комфортный уровень, нужно после включения (и даже после "теплой" перезагрузки) три раза нажать FN+яркость. Я хочу сделать программку, делающую это за меня.
Можно ли сначала перехватить нажатие клавиш, чтобы получить код этого сочетания? Скорее всего да, что-то такое я делал 25 лет назад, тыря пароли в институте.
А вот дальше - куда этот код заслать? В стандартный обработчик BIOS? Это и должна выполнять программка на ассемблере или даже на Паскале, поскольку Паскаль я знаю, а размер кода не важен, т.к. программка не остается резидентной в ОЗУ.
А может DOS не знает таких клавиш, как "FN", "яркость+", "яркость-", и если я перехвачу прерывание DOS, то не получу никаких кодов? Не будет никакого прерывания по клавиатуре?

Escalibur
Advanced Member
Сообщения: 2748
Зарегистрирован: 12.10.2017,15:45
Откуда: Москва

Сообщение Escalibur » 02.12.2018,22:48

sanders, я думаю, эти сочетания не отловить программно. Не все коды клава возвращает, сочетания FN ИМХО не отловишь, т.к. они реализованы железно.

i8088
Advanced Member
Сообщения: 4387
Зарегистрирован: 30.01.2015,17:06
Откуда: г. Баку, Азербайджан

Конкурсы

Вклад в сообщество

Сообщение i8088 » 03.12.2018,08:48

Предлагаю посмотреть, отправляется ли какой-либо scan-code при нажатии этих клавиш в программе тестирования клавиатуры, по моему есть в AMI DIAG
(как во встроенной диагностике у 286 плат)

Аватара пользователя
sanders
Advanced Member
Сообщения: 9377
Зарегистрирован: 26.03.2008,14:47
Откуда: Санкт-Петербург

Вклад в сообщество

Сообщение sanders » 03.12.2018,08:58

Нет там ничего встроенного. ХТ-шка эта с зашитым DOS-ом и собственным BIOS.
Может, как-то "сесть" на IRQ1 и выдавать на экран коды нажатий, а потом возвращать коды на дальнейшую обработку? Если коды "FN+яркость" появятся, тогда уже думать что с ними дальше делать.
int 1 я же смогу перенаправить на свой обработчик?

Аватара пользователя
lexx
Full Member
Сообщения: 220
Зарегистрирован: 12.08.2010,10:10
Откуда: Wrocław

Сообщение lexx » 03.12.2018,09:18

Я, может быть, ошибаюсь, но scan-code никуда не отправляется, а считывается обработчиком прерывания INT9h из порта 60h. Нужно просто перехватить вектор INT9h и прочитать скан-код из порта раньше стандартного обработчика.
sanders писал(а):int 1 я же смогу перенаправить на свой обработчик?
Не int 1 а INT9. При инициализации контроллера прерываний линии IRQ 1 соответствует вектор INT 9

Аватара пользователя
uav1606
Advanced Member
Сообщения: 5976
Зарегистрирован: 16.01.2008,22:04
Откуда: Енакиево
Контактная информация:

Вклад в сообщество

Сообщение uav1606 » 03.12.2018,12:28

По-хорошему, надо бы покопаться в коде BIOS, найти код изменения яркости, а потом повторить его в своей программе нужным образом. (Т.е. выяснить, к примеру, в какие порты идёт при этом запись и т.п.)

Что касается клавиатуры...
Ну, узнать скан-код можно попытаться с помощью спец. программ вроде этой:
ftp://ftp2.se.netbsd.org/mirror/archive ... ncodtp.zip
А вот как его сымитировать...
Есть функция 05 прерывания Int 16h, которая предназначена для имитации нажатия клавиш, но она больше для пользовательских программ, вряд ли BIOS на это как-то прореагирует.
Есть и программы для этого, вроде вот этой:
ftp://ftp2.se.netbsd.org/mirror/archive ... ncd500.zip
Но то же возражение - BIOS, скорее всего, будет на эту имитацию наплевать...

Аватара пользователя
sanders
Advanced Member
Сообщения: 9377
Зарегистрирован: 26.03.2008,14:47
Откуда: Санкт-Петербург

Вклад в сообщество

Сообщение sanders » 03.12.2018,12:42

Если бы кто-то взялся за исследования кода BIOS, я бы считал Debug-ом BIOS, только вот он может быть не только в видимой части E000-FFFF, но и в какой-то скрытой, как скрыта MS-DOS, зашитая там же в ROM, и тогда я считаю не всё.
А за ссылки спасибо, на выходных попробую.

Ответить