![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Буфер клавы
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]Напиши конкретно, что надо