![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Catty |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 239 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Осуществить коррекцию прерывания Int 9 (от клавиатуры)
так, чтобы: а) выполнялись все действия системного обработчика данного прерывания; б) при нажатии одной из клавиш-переключателей вывести на эк- ран название этой клавиши. клавиша-переключатель: Печать копии экрана. Генерируется при нажатии на кла- виатуре клавиши PrtScr. Обычно используется для печати образа экрана. Для процессора 80286 генерируется при выполнении машинной команды BOUND, если проверяемое значение вышло за пределы заданного диапазона. :flowers: Сообщение отредактировано: Catty - 2.04.2005 15:38 -------------------- For every evil under the sun
There is a remedy or there is none If there is one - try to find it If there is none - never mind it! |
![]() ![]() |
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Catty , вот тебе для коррекции int9h, (программа Volvo).
Она работает но PrtScr ей не поймаешь, потому что в порт не пишется эта клавиша.. Код uses dos, crt; Var wasPrtScr: boolean; {признак нажатия принтс скрина} do_exit: boolean;{признак нажатия esc} Old_09: Pointer; {указатель на старую процедуру обработки} KbdIntVec: procedure;{процедура - старый обработчик прерывания} {$f+} Procedure New9; Interrupt; {новая процедура обработки прерывания} Var Scan: Byte;{скэн код клавиши} Begin Scan := Port[ $60 ]; {читаем скэн код из порта клавы} { вот тут должна быть проверка на скэн-код PrtScr } wasPrtScr := (Scan = $14); {это не работает} do_exit := (scan = $01); { Это - Escape } { If wasPrtScr Then Else} Begin Inline( $9C ); {сохраняем регистры} KbdIntVec; {вызываем стандартный обработчки} End; End; {$f-} var k:byte; BEGIN GetIntVec($9, @KbdIntVec); {получаем вектор прерывания} GetIntVec($9, Old_09); {и указатель} SetIntVec($9, Addr(New9)); {ставим свой обработчик} repeat if wasPrtScr then begin writeln('Print Screen pressed'); wasPrtScr := false; end; if keypressed then {нажата клавиша} begin k:=ord(readkey); {читаем клавишу} if k=0 then begin k:=ord(readkey); writeln('ext: ',k) end else writeln(chr(k)); end; until do_exit; SetIntVec($9, Old_09); {ставим старый вектор прерывания, убирая свой} END. Я тут посмотрел, и нашел как отличить CTRL+ALT+DEL.. вот так: Код procedure MyInt9; far; assembler; asm push ax in al,60h cmp al,53h {Є« ўЁи Del} jne @Exit push ds xor ax,ax mov ds,ax mov al,ds:[417h] and al,0Ch cmp al,0Ch {Ctrl+Alt ?} jne @No in al,61h mov ah,al or al,80h out 61h,al xchg ah,al out 61h,al mov al,20h out 20h,al pop ds pop ax iret @No: pop ds @Exit: pop ax push seg JmpFar push Offset JmpFar end; А клоню я к тому, что тебе к нашим ассемблерщикамнадо ![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Catty |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 239 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Ой спасибо Олежик! А можно какие то комментарии понаписывать, а то мне ёё всё таки объяснять надо преподу! :flowers:
-------------------- For every evil under the sun
There is a remedy or there is none If there is one - try to find it If there is none - never mind it! |
Altair |
![]()
Сообщение
#4
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Да не мне спасибо, а volvo!
![]() коменты напишу щас ![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Altair |
![]()
Сообщение
#5
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
сделал.... читай тот пост
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Catty |
![]()
Сообщение
#6
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 239 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Спасибо ребята! Только вот вопрос, а почему прога ничего не выдает????
Ты говорил тут что-то не срабатывает? -------------------- For every evil under the sun
There is a remedy or there is none If there is one - try to find it If there is none - never mind it! |
Altair |
![]()
Сообщение
#7
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
как это не срабатывает? на нажатия принт скринатолько не срабатывает. Все остальное по заданию.
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Catty,
попробуй вот эту программку (понажимай Ctrl, Alt, левый и правый Shift ...) Для выхода - Escape... Прикрепленные файлы ![]() |
Catty |
![]()
Сообщение
#9
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 239 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
спасибо Volvo :flowers:
-------------------- For every evil under the sun
There is a remedy or there is none If there is one - try to find it If there is none - never mind it! |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 6:26 |