Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Assembler и клавиатурный буфер

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Vantesmrbin



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Как записать в клавиатурный буфер подряд символы A B C D и Enter(или их ASCII или Scan коды) так,чтобы все другие активные программы (под Wind и Dos),прервавшие свою работу и требующие в данный момент ввод с клавиатуры,считали,что ввод совершен и использовали эти символы,как ответ на свой запрос.
Пожалуйста (!),если не сложно,приведите работающий (!!!) исходный код под asm (буду подстыковывать к паскалю как Assembler-процедуру) - в  
I-nete ничего путного не нашел,а сам языка не знаю и учить долго

Всего записей: 116 | Зарегистр. 04-05-2006 | Отправлено: 19:57 22-08-2006
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
боюсь, напрямую у тебя ничего не получится... винды не дадут ни писать прямо
в клав-буфер, ни в биос-данные... ни даже вот так по простому:

Код:
 
  pascal-code;
...
  asm
    mov ah,  5
    mov al,  1eh
    mov cl, 'A'
    int    16h
  end;
...
  другой паскаль-код;
 

 
надо использовать винАПИ и посылать мессаджи, так что
смотри виндовский хелп sdk по АПИ
 
хотя, я может уже всё это и забыл...

Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 20:17 22-08-2006 | Исправлено: akaGM, 20:30 22-08-2006
Mickey_from_nsk

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
В принципе ты не совсем прав. Если извратнуться, то можно и в дос пролезть.
Есть лазейка для проникновения в досовскую консоль. Она описана в DDK. Для этого надо драйвер консоли написать соответствующий.
А для виндовс приложений - там только через Messages. Но там этого вполне хватит.

Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 08:08 23-08-2006
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mickey_from_nsk
ну наверное...
только вот именно что _извратнуться_... а это товарищу надо?
 
--------------
кстати, а клавиатурные порты напрямую в виндах доступны?
никогда не пробовал...
а, нет... 60 и 64 не позволяют запихивать данные...
забыл всё на фиг...

Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 14:58 23-08-2006 | Исправлено: akaGM, 15:11 23-08-2006
Mickey_from_nsk

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Ну, помнится в досе была такая фигня, что если знать порты контроллера, можно через него все сделать. Мы, вроде, эмулировали нажатия клавиш для биоса через контроллер клавиатуры. Но было это сильно давно. Возможно, что и не правда.
Но винда это может позволить на уровне драйвера, но никак не прикладного приложения.

Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 15:34 23-08-2006
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mickey_from_nsk

Цитата:
Ну, помнится в досе была такая фигня...

ну да...
не инт16 так [40:001a]

Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 16:02 23-08-2006
Mickey_from_nsk

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Не. не так - через OUT кажись все делалось.  
 
Точно.
В контроллере клавиатуры есть функции записать код клавиши и считать код клавиши. Работа идет через порты. Биосу и досу можно подсунуть что угодно. Только кто это дасть сделать в виндах...

Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 16:14 23-08-2006 | Исправлено: Mickey_from_nsk, 16:24 23-08-2006
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну а я о чём?
[40:001a] -- адрес кей-буфера
 
а с портами 60/64 -- скорее управленческие команды
out 60, ax
 
а адрес конролллера только в родных ibm держался, в клонах очень даже варьировался...
 
 
---------

Цитата:
Только кто это дасть сделать в виндах

 
так вот у меня вопрос и возникает... (лень искать)
как с портами напрямую в в32 играться?

Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 16:26 23-08-2006 | Исправлено: akaGM, 16:28 23-08-2006
FireZone

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Цитата:
так вот у меня вопрос и возникает... (лень искать)  как с портами напрямую в в32 играться?
Законно - написать драйвер режима ядра; незаконно - использовать что-либо вроде giveio.sys

Всего записей: 293 | Зарегистр. 28-01-2004 | Отправлено: 18:16 23-08-2006
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FireZone
 
ага, ясно...
 
поступим нетрально...
т.е. ничего делать не будем...

Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 18:20 23-08-2006
Vantesmrbin



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Отличное предложение -akaGM  ,да и
Цитата:
_извратнуться_...  
тоже  
 Однако...
вариант с Yandex:
Приведенная программа записывает в буфер клавиатуры пять символов '*'.  
Запустите ее и посмотрите на системное приглашение. Вы увидите что-нибудь похожее на C:\>*****. ничего не вижу и паскаль ругается ...
#include <stdio.h>
#include <dos.h>
 
void main(void);
 
void main(void) {
 
        union REGS  rg;
        int   i;
 
         for(i=0; i<5; i++) {
 
                rg.h.ah = 5;
 
                rg.h.cl = '*';
                rg.h.ch = 9;
 
                int86(0x16, &rg, &rg);
 
         }
}
 

Всего записей: 116 | Зарегистр. 04-05-2006 | Отправлено: 21:11 24-08-2006
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну если с дискетки с ДОС'ом стартанёшь, то всё будет ок...
 
а так...
вяснили уже -- драйвер ядра клавиатуры -- и ни-ни сверх...

Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 21:17 24-08-2006 | Исправлено: akaGM, 21:18 24-08-2006
FireZone

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vantesmrbin
Чтобы обмануть всех, делаем аппаратный эмулятор клавиатуры на микроконтроллере и втыкаем его между клавиатурой и системником. Эмулятором рулим через его последовательный порт чем угодно: тем же компьютером, другим компьютером, подпаянными кнопочками. А вообще, сужай задачу. Ну и чтобы тебе время зря не потратить на заведомо тупиковые пути: из досовской программы под виндами никакой ассемблерный кусок тебе не поможет, даже если вся программа хоть прямо в машинных кодах написана.

Всего записей: 293 | Зарегистр. 28-01-2004 | Отправлено: 09:28 25-08-2006
Mickey_from_nsk

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
FireZone
И все-таки настаиваю. Фигу ты из драйвера клавиатуры просто так чего получишь. Там надо будет разруливать на очереди сообщений к окнам. То есть, просто в контроллер что пиши, что не пиши, где фокус ввода будет находиться, туда все и пойдет.
Для досовских приложений можно сделать (он довольно простой) драйвер консоли с дырдочкой наружу (в винды), через которую будет проистекать поток каких-то действий. Что дальше будет делать с ними драйвер - решать ему.

Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 09:31 25-08-2006
FireZone

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mickey_from_nsk
Цитата:
И все-таки настаиваю. Фигу ты из драйвера клавиатуры просто так чего получишь. Там надо будет разруливать на очереди сообщений к окнам. То есть, просто в контроллер что пиши, что не пиши, где фокус ввода будет находиться, туда все и пойдет.
С этим никто и не спорил. О драйвере я говорил лишь как о дороге в режим ядра, чтобы иметь железо. Согласно формулировке задачи человек просто хочет эмулировать клавиатуру, а не посылать конкретные коды конкретным программам. Т.е., писать, куда бог пошлёт. Если он хочет сам следить за фокусом, это его право на изврат. Другим способом он задачу пока не сформулировал.
 
Добавлено:
И это он хочет делать, как я понял, из досовской программы.

Всего записей: 293 | Зарегистр. 28-01-2004 | Отправлено: 09:45 25-08-2006
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
И это он хочет делать, как я понял, из досовской программы.

эх...
у меня в установке стоит Walters образца 1988 года... 8088 4.72 MHz...
и на нём ещё висит мой драйвер (да какой на фиг драйвер! -- .com резидент -- русификатор)
ещё раз
эх...
 
оффтоп конечно...

Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 16:42 26-08-2006
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Assembler и клавиатурный буфер


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru