Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Буфер клавы


Snap ©   (2002-11-11 21:56:00) 

Мож кто знает, где находится системный буфер клавы?


Snap   (2002-11-20 14:38:00) [1]

keybd_event не работает, поютому и хочу в буфер


Игорь Шевченко   (2002-11-12 14:23:00) [2]

Положить - keybd_event. Но к буферу клавиатуры это никакого отношения не имеет.


Song   (2002-11-12 13:30:00) [3]

Надо получить Ring0 чтобы можно было через порты работать.


Snap   (2002-11-12 11:58:00) [4]

Tak mne nado ne vzat a polozhit!


Игорь Шевченко   (2002-11-12 11:57:00) [5]

GetAsyncKeyState


Snap   (2002-11-12 11:25:00) [6]

otvette plizz


Ich Hasse   (2002-11-11 22:45:00) [7]

ИМХО

mem[Seg0040: $17] //это на скорлько я понимаю обычные клавиши
mem[Seg0040: $18] //это Alt, Ctrl, Shift


Не знаю как поможет, но это адреса в памяти.


Snap   (2002-11-11 22:30:00) [8]

Ну ответьте, пожалуйста!


Snap   (2002-11-11 22:14:00) [9]

Это всё очень хорошо, но так вот где лежит этот буфер?
И можно ли в него записать какую- нить инфу из Винды?


turtlesage   (2002-11-11 22:11:00) [10]

А пока информация к размышлению...
Надеюсь ассемблерными вставками пользоваться умеешь
101-клавишная клавиатура имеет буфер,
организованный в виде очереди (FIFO - "первый пришел, первый ушел").
Этот клавиатурный буфер может хранить 32 кода (нажатия и отжатия) в
режиме 1 и по 16 кодов сканирования в режимах 2 и 3. Сканкоды
сохраняются в буфере до тех пор, пока система не будет готова их
принять. Если буфер клавиатуры переполнен, то новый сканкод не
генерируется, а в буфер помещается код переполнения (FFh в режиме 1, 00h
в режимах 2 и 3), для которого в буфере постоянно резервируется место.
Доступ к клавиатуре через порты
ввода-вывода является самым низкоуровневым методом доступа.
Такой метод используется обычно только прерываниями INT 09h, INT
15h и драйверами клавиатуры.

Порт 60h предназначен для чтения данных с клавиатуры и сохранен для
совместимости с клавиатурой PC XT.
С помощью порта 64h можно читать данные с клавиатуры (коды клавиш и
статус), программировать и осуществлять настройку клавиатуры.
Рекомендуется использовать порт 60h для чтения сканкодов, а 64h - для
определения статуса и программирования клавиатуры. Такое разделение
функций обеспечит максимальную гибкость программам.
Пример чтения сканкода с помощью порта 60h:

in al,60h ; прочитать сканкод
mov bl,al ; в bl - сканкод

in al,61h ; см. предыдущий пример
mov ah,al
or al,80h
out 61h,al
xchg ah,al
out 61h,al

mov al,20H ; послать сигнал конца прерывания
out 20H,al ; в контроллер прерываний

При программировании контроллера клавиатуры необходимо первоначально в
порт 64h записать код команды, сделать задержку и затем записать байт
данных (список команд приведен ниже):

mov al, код команды ; см. ниже
out 64h, al ; запись кода команды в порт
; если нужно посылать данные,
mov cx, 2000h ; то необходима задержка
pause: loop pause ; задержка
mov al, байт данных ; запись параметра команды
out 64h, al


Snap   (2002-11-11 22:06:00) [11]

Куда прерывание клавы пишет нажатые клавиши? Не может же оно сразу их в Винду, и в поток сообщений нужного процесса? Для начала наверное в системный клавиатурный буфер? Или я чего то не понимаю?


TurtleSage   (2002-11-11 22:03:00) [12]

Напиши конкретно, что надо


Наверх

Титульная страница Поиск, карта сайта Написать письмо