помогите решить задачу

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
igoreky
Сообщения: 3
Зарегистрирован: 15 апр 2008, 12:00

Наш преподаватель, наверное сошел с ума: задал такую задачу :confused: и даже не объяснил, как делать. Может кто поможет.
Нужно в Pascal написать прогу: вводится строка с клавиатуры, посленажатия комбинации прав Shift +левCtrl+F6 блокируется нажатие клавиши 6, повторное нажатие этой комбинации снимает блокировку.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

:) Вы сами пробовали нажать RShift + LCtrl + F6? У меня допустим пальцы на шпагат реально садятся! ;) А если по сути, то
1) Создается и регится обработчик прерывания клавиатуры, в виде процедуры
2) Обработчик ловит хитрую комбинацию и переключает флаг фильтра 6-ки
3) Если фильтр 6-ки включен, и нажата 6-ка, то код нажатой клавиши не давать
Остальные действие по вводу строки обычные с помощью Readln;
It's a long way to the top if you wanna rock'n'roll
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

Это всё на turboPascal ? под DOS ?
ой... тогда чувствую, что тут пахнет работой с буфером клавиатуры, статусом состояния, сканкодами...
вот, посмотрите для начала unit KEYBOARD.PAS:
Процедуры поддержки клавиатуры на уровне BIOS,
запросы к клавиатуре, описание кодов клавиш

и второй файлик - текст из TechHelp! - описание статуса клавиатуры под Dos.

когда-то я бы сделал эту задачку за пять минут... но те времена давно канули в лету... ;-(
Вложения
keyb_status.zip
(1.84 КБ) 29 скачиваний
KEYBOARD.zip
(2.24 КБ) 19 скачиваний
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

А препод действительно сошел с ума. Задача абсолютно лишена смысла. Если он вас только не учит кейлоггеры писать.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):Если он вас только не учит кейлоггеры писать.
Пусть сам препод сначала напишет, на чистом паскале, без всяких asm, assembler и inline.
It's a long way to the top if you wanna rock'n'roll
igoreky
Сообщения: 3
Зарегистрирован: 15 апр 2008, 12:00

Ну, а если с asm или еще с чем нибудь, то как это сделать или хотябы подскажите где посмотреть. Заранее спасибо огромное ;) .
igoreky
Сообщения: 3
Зарегистрирован: 15 апр 2008, 12:00

А если при нажатии только одной F6 клавиши будет блокироваться клавиша у - это проще. Может так сможете помочь?! Буду очень благодарен.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Вообще говоря, на "чистом паскале" есть возможность писать перехватчики прерываний.

Из встроенного Help-а Паскаля:

Код: Выделить всё

 interrupt (procedure directive)
 =================================
The interrupt directive allows you to declare interrupt procedures.

 Syntax:
 procedure IntProc(Flags, CS, IP, AX, BX, CX, DX, SI, DI, DS, ES, BP: Word);
 interrupt;

 Remarks:
An interrupt procedure must specify the following procedure header:

The registers are passed as pseudo-parameters so you can use and modify them
in the code of the interrupt procedure.
Ответить