ТАДКОМ » 05.09.2003 (Пт) 7:59
[Нашёл статью Дмитрия Катерова - "Программирование клавиатуры", где популярно всё описано, и вроде всё понятно, то есть ставится заплата на прерывание 9 в BIOSе и приводится программа.... ноооо на Pascalе в котором я Я идиот! Убейте меня, кто-нибудь!... дуб..... Может кто поможет как это .. записать на VB6...
текст его проги:
var SvInt09 : procedure;
SvExitProc : pointer;
IsBIOSActive: boolean;
KeyPressed : array[0..255] of boolean;
CurKey : byte;
procedure ProcessKeyb;
const PrevKey: byte=0;
var key,IsGray: byte;
begin
key:=Port[$60];
if PrevKey=224 then IsGray:=$80 else IsGray:=0;
if key<>224 then { если не признак черной
клавиши" }
begin
if key>127 then { клавиша отпущена }
KeyPressed[key-128+IsGray]:=false
else { клавиша нажата }
KeyPressed[key+IsGray]:=true;
end;
if key<128 then CurKey:=key;
PrevKey:=key;
end;
procedure NewInt09; interrupt;
begin
ProcessKeyb;
if IsBIOSActive then { не блокировать BIOS }
begin Inline($9C); SvInt09 end;
else Port[$20]:=$20; { если нужно блокировать }
end;
procedure CloseKeyboard; forward;
procedure OpenKeyboard(LockBIOS: boolean)
begin
FillChar(KeyPressed,256,0); CurKey:=0;
GetIntVec(9,@SvInt09);
SetIntVec(9,@NewInt09);
IsBIOSActive:=not LockBIOS;
SvExitProc:=ExitProc;
ExitProc:=@CloseKeyboard;
end;
procedure CloseKeyboard;
begin
if @SvInt09=nil then Exit; { клавиатура не открыта }
SetIntVec(9,@SvInt09);
@SvInt09:=nil;
ExitProc:=SvExitProc;
end;
Теперь в любом (!) месте программы можно анализировать массив KeyPressed, не задумываясь о том, каким образом он обновляется. Например:
if KeyPressed[72] and KeyPressed[77] then ...
{ если одновременно нажаты вверх и вправо, то ... }
Заранее буду очень благодарен...
Александр