Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
3-4809
Nuclear
2003-01-17 14:13
2003.02.03
Автоинкрементное поле в Access


1-4938
phantom2040
2003-01-23 08:40
2003.02.03
Еще раз про ImageList


3-4792
Alexandr
2003-01-15 12:12
2003.02.03
Формат даты в Interbase и не только


14-5200
paulsin
2003-01-15 13:43
2003.02.03
в чем отличие FireBird от Interbase ?


1-5036
blond
2003-01-24 09:23
2003.02.03
Терминирование потока (thread)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский