Страница 1 из 1

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

Добавлено: 15 апр 2008, 14:49
igoreky
Наш преподаватель, наверное сошел с ума: задал такую задачу :confused: и даже не объяснил, как делать. Может кто поможет.
Нужно в Pascal написать прогу: вводится строка с клавиатуры, посленажатия комбинации прав Shift +левCtrl+F6 блокируется нажатие клавиши 6, повторное нажатие этой комбинации снимает блокировку.

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

Добавлено: 15 апр 2008, 21:43
somewhere
:) Вы сами пробовали нажать RShift + LCtrl + F6? У меня допустим пальцы на шпагат реально садятся! ;) А если по сути, то
1) Создается и регится обработчик прерывания клавиатуры, в виде процедуры
2) Обработчик ловит хитрую комбинацию и переключает флаг фильтра 6-ки
3) Если фильтр 6-ки включен, и нажата 6-ка, то код нажатой клавиши не давать
Остальные действие по вводу строки обычные с помощью Readln;

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

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

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

когда-то я бы сделал эту задачку за пять минут... но те времена давно канули в лету... ;-(

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

Добавлено: 16 апр 2008, 11:07
Хыиуду
А препод действительно сошел с ума. Задача абсолютно лишена смысла. Если он вас только не учит кейлоггеры писать.

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

Добавлено: 16 апр 2008, 12:04
somewhere
&quot писал(а):Если он вас только не учит кейлоггеры писать.
Пусть сам препод сначала напишет, на чистом паскале, без всяких asm, assembler и inline.

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

Добавлено: 17 апр 2008, 07:45
igoreky
Ну, а если с asm или еще с чем нибудь, то как это сделать или хотябы подскажите где посмотреть. Заранее спасибо огромное ;) .

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

Добавлено: 17 апр 2008, 09:27
igoreky
А если при нажатии только одной F6 клавиши будет блокироваться клавиша у - это проще. Может так сможете помочь?! Буду очень благодарен.

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

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

Из встроенного 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.