Форум: "Система";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
ВнизБуфер клавы Найти похожие ветки
← →
Snap (2002-11-11 21:56) [0]Мож кто знает, где находится системный буфер клавы?
← →
TurtleSage (2002-11-11 22:03) [1]Напиши конкретно, что надо
← →
Snap (2002-11-11 22:06) [2]Куда прерывание клавы пишет нажатые клавиши? Не может же оно сразу их в Винду, и в поток сообщений нужного процесса? Для начала наверное в системный клавиатурный буфер? Или я чего то не понимаю?
← →
turtlesage (2002-11-11 22:11) [3]А пока информация к размышлению...
Надеюсь ассемблерными вставками пользоваться умеешь
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:14) [4]Это всё очень хорошо, но так вот где лежит этот буфер?
И можно ли в него записать какую- нить инфу из Винды?
← →
Snap (2002-11-11 22:30) [5]Ну ответьте, пожалуйста!
← →
Ich Hasse (2002-11-11 22:45) [6]ИМХО
mem[Seg0040: $17] //это на скорлько я понимаю обычные клавиши
mem[Seg0040: $18] //это Alt, Ctrl, Shift
Не знаю как поможет, но это адреса в памяти.
← →
Snap (2002-11-12 11:25) [7]otvette plizz
← →
Игорь Шевченко (2002-11-12 11:57) [8]GetAsyncKeyState
← →
Snap (2002-11-12 11:58) [9]Tak mne nado ne vzat a polozhit!
← →
Song (2002-11-12 13:30) [10]Надо получить Ring0 чтобы можно было через порты работать.
← →
Игорь Шевченко (2002-11-12 14:23) [11]Положить - keybd_event. Но к буферу клавиатуры это никакого отношения не имеет.
← →
Snap (2002-11-20 14:38) [12]keybd_event не работает, поютому и хочу в буфер
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c