Язык:
Русский
English
SetIntVec (процедура) (модуль WinDos)
Устанавливает заданный вектор прерывания на заданный адрес.
Объявление
Procedure SetIntVec(IntNo : Byte; Vector : Pointer);
Режим
Windows, Real, Protected;
Замечания
IntNo определяет номер вектора прерываний (0 .. 255) и Vector определяет адрес.
Vector обычно создается с помощью оператора @ для указания адреса процедуры обработки прерывания. Пусть Int1BSave - переменная указательного типа и Int1BHandler - идентификатор процедуры обработки прерывания, тогда первая последовательность операторов устанавливает новый обработчик прерывания, а вторая восстанавливает первоначальный обработчик:
GetIntVec ($1B, Int1BSave);
SetIntVec ($1B, @Int1BHandler);
.
.
.
SetIntVec ($1B, Int1BSave);
Ограничения
В защищенном режиме DOS, в стандартном или расширенном режимах Windows, SetIntVec устанавливает вектор прерывания защищенного режима с заданным номером вектора прерываний. SetIntVec не может использоваться для изменения векторов прерываний реального режима или векторов исключений в защищенном режиме.
Смотри также
Пример
Язык:
Русский
English
{ Неверное использование прерываний может повредить информацию и/или }
{ сам компьютер на аппаратном уровне ! }
{ Ещё один пример использования обработчиков прерываний можно }
{ посмотреть в программе для процедуры Keep }
uses Dos, Crt;
var
Int1CSave : Pointer;
Fl : Boolean;
{$F+}
procedure TimerHandler; Interrupt;
begin
{ ISR на события таймера }
{*** Обратитесь к документации по DDK или
DPMI для информации по созданию ISR *** }
{ ISR на события таймера вызываются 18 раз в секунду }
{ Данный пример включает внутренний динамик 9 раз в
секунду с частотой 1000 }
if Fl then
NoSound
else
Sound(1000);
Fl := not Fl;
end;
{$F-}
begin
{ Получаем старый вектор прерывания $1C - (системный таймер) }
{ и сохраняем его в переменной Int1CSave }
GetIntVec($1C, Int1CSave);
{ Переназначаем его на нашу процедуру обработки прерывания }
SetIntVec($1C, @TimerHandler);
WriteLn('Нажмите любую клавишу для снятия обработчика...');
repeat
until KeyPressed;
{ Возвращаем обработчик прерывания в исходное состояние }
SetIntVec($1C, Int1CSave);
end.