Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2011, 16:25   #1
Vilgelm
 
Регистрация: 05.06.2009
Сообщений: 7
По умолчанию Обработка прерываний клавиатуры в резидентной программе

Здравствуйте.

Стоит предо мною такая задача:

имеется резидентная программа (keep (1), которая выполняет функцию будильника. Требуется сделать ручное управление временем между тиками.

Но это не страшно, как это сделать, я разобрался. Мой вопрос вот такой:

как именно мне обрабатывать нажатия клавиш в резидентной программе? Т.е. написал я if keypressed и так далее, только вот ведь программа то на нажатие клавиш не реагирует, ибо висит "в бэкграунде". Т.е. все мои нажатия клавиш обрабатывает уже сама коммандная строка (в моем случае DosBox).

Сорри, что субмубрно написал, болею

Последний раз редактировалось Vilgelm; 28.06.2011 в 16:32.
Vilgelm вне форума Ответить с цитированием
Старый 30.06.2011, 02:07   #2
cliv
Пользователь
 
Регистрация: 30.06.2011
Сообщений: 13
По умолчанию

написать свой обработчик прерывания клавиатуры int9 и в нем проверять нажатие клавиши например такой
cliv вне форума Ответить с цитированием
Старый 30.06.2011, 09:11   #3
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Цитата:
написать свой обработчик прерывания клавиатуры int9 и в нем проверять нажатие клавиши например такой
Как я понял, это нужно на паскале.
Вот, когда-то делал подобное, делается писк при нажатии на клавиши.
Код:
{$M $1000,0,0}
Program Scan_code;
Uses Crt,Dos;

Var
   OldKey: Procedure;
   keyfl,t,last: Byte;
   vkl:boolean;
   chst, dl:integer;
   cod1,cod2:integer;
{$F+}
Procedure Key; Interrupt;	{обработчик прерывания}
Begin
 t:=Port[$60];
 case t of
   $2a: keyfl:=keyfl or 2;       {установка флага Shift}
   $1:  keyfl:=keyfl or 1;       {установка флага Esc}
   $aa: keyfl:=keyfl and $fd;    {Сброс флага Shift}
   $81: keyfl:=keyfl and $fe;    {Сброс флага Esc}
 end;
 if keyfl=3 then
  begin
   vkl:=not(vkl);
   if not(vkl) then write ('-==Режим озвучки включён.==-')
    else write ('-==Режим озвучки выключен.==-')
  end;
 if (not(vkl) and (last<>t))then
  begin
    if t and $80=0 then Sound(chst)
    else Sound(chst+chst div 2);
    if (t=1) or (t=42) or (t=54) or (t=28) then Delay(dl*3)
    else Delay(dl);
    Nosound;
  end;
 last:=t;
 Inline($9C);
 OldKey;
End;
{$F-}

Begin			{основная программа}
 if ParamCount<>2 then
   Writeln ('Введены неверные параметры. Первый параметр - частота, второй длительность. Пример ввода:os 1000 100')
 else
   begin
   val(paramstr(1),chst,cod1);
   val(paramstr(2),dl,cod2);
   if (chst<=0) or (dl<=0) or (cod1<>0) or (cod2<>0) then
    begin
     Writeln ('Введены неверные параметры. Первый параметр - частота, второй длительность. Пример ввода:os 1000 100');
    end
   else
    begin
     if dl>500 then Writeln ('Длительность не должна превышать 500 мсек')
     else begin
       writeln ('Вкл/Выкл озвучки клавиатуры - Esc+LSift');
       GetIntVec($9,@OldKey);
       SetIntVec($9,Addr(Key));
       Keep(0);
     end;
    end;
  end;
End.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 30.06.2011, 12:09   #4
cliv
Пользователь
 
Регистрация: 30.06.2011
Сообщений: 13
По умолчанию

можно попробовать написать обработчик и на паскале, но перехватывать прерывание все равно придется ибо
Цитата:
программа то на нажатие клавиш не реагирует, ибо висит "в бэкграунде"
другим способом получить управление не получится
cliv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выгрузка резидентной программы по нажатию клавиш triest Паскаль, Turbo Pascal, PascalABC.NET 0 12.06.2011 22:39
Выгрузка резидентной программы по нажатию клавиш triest Помощь студентам 4 11.06.2011 16:22
ошибка в резидентной программе triest Паскаль, Turbo Pascal, PascalABC.NET 0 26.05.2011 22:14
обработка прерываний fen1ksss Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 04.12.2010 23:39
Обработка прерываний Журенова Катя Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 11.05.2009 01:55