» Управление клавиатурой Borland Delphi. . . Блог программистов


Блог программистов




20072 Мар

Управление клавиатурой

Для начала маленький код для определения нажатия клавиши Print Screen:


private
procedure AppIdle(Sender: TObject; var Done: Boolean);

//…

procedure TForm1.AppIdle(Sender: TObject; var Done: Boolean);
begin
if GetAsyncKeyState(VK_SNAPSHOT) 0 then
Form1.Caption := 'PrintScreen!';
Done := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnIdle := AppIdle;
end;

А теперь программный аналог Print Screen’а:

procedure TForm1.Button1Click(Sender: TObject);
var
bmp: TBitmap;
begin
bmp := TBitmap.Create;
try
bmp.Width := Screen.Width;
bmp.Height := Screen.Height;
BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
GetDC(GetDesktopWindow), 0, 0, SRCCopy);
Image1.Picture.Bitmap:=bmp;
finally
bmp.Free;
end;
end;

Проверка свечения диодов на клавиатуре:

procedure TForm1.Button1Click(Sender: TObject);
begin
// x – integer. X = 145 = Scroll Lock; X = 144 = Num Lock; X = 20 = Caps Lock
if GetKeyState(X) and 1 = 0 then
Form1.Caption := 'Не горит'
else
Form1.Caption := 'Горит';
end;

Эмуляция нажатия клавиш например для Memo1:

SendMessage(Memo1.Handle, WM_CHAR, Ord(‘A’), 0);

И на последок коды виртуальных клавиш:

vk_LButton   = $01;
vk_RButton = $02;
vk_Cancel = $03;
vk_MButton = $04; { генерятся только системой вместе с L & RBUTTON }
vk_Back = $08;
vk_Tab = $09;
vk_Clear = $0C;
vk_Return = $0D;
vk_Shift = $10;
vk_Control = $11;
vk_Menu = $12;
vk_Pause = $13;
vk_Capital = $14;
vk_Escape = $1B;
vk_Space = $20;
vk_Prior = $21;
vk_Next = $22;

vk_End = $23;
vk_Home = $24;
vk_Left = $25;
vk_Up = $26;
vk_Right = $27;
vk_Down = $28;
vk_Select = $29;
vk_Print = $2A;
vk_Execute = $2B;
vk_SnapShot = $2C;
{ vk_Copy = $2C не используется клавиатурой }

vk_Insert = $2D;
vk_Delete = $2E;
vk_Help = $2F;
{ vk_A - vk_Z такие же, как и их ASCII-эквиваленты: 'A' - 'Z' }
{ vk_0 - vk_9 такие же, как и их ASCII-эквиваленты: '0' - '9' }

vk_NumPad0 = $60;
vk_NumPad1 = $61;
vk_NumPad2 = $62;
vk_NumPad3 = $63;
vk_NumPad4 = $64;
vk_NumPad5 = $65;
vk_NumPad6 = $66;
vk_NumPad7 = $67;
vk_NumPad8 = $68;
vk_NumPad9 = $69;
vk_Multiply = $6A;
vk_Add = $6B;
vk_Separator = $6C;
vk_Subtract = $6D;
vk_Decimal = $6E;
vk_Divide = $6F;
vk_F1 = $70;
vk_F2 = $71;
vk_F3 = $72;
vk_F4 = $73;
vk_F5 = $74;

vk_F6 = $75;
vk_F7 = $76;
vk_F8 = $77;
vk_F9 = $78;
vk_F10 = $79;
vk_F11 = $7A;
vk_F12 = $7B;
vk_F13 = $7C;
vk_F14 = $7D;
vk_F15 = $7E;
vk_F16 = $7F;
vk_F17 = $80;
vk_F18 = $81;
vk_F19 = $82;
vk_F20 = $83;
vk_F21 = $84;
vk_F22 = $85;
vk_F23 = $86;
vk_F24 = $87;
vk_NumLock = $90;
vk_Scroll = $91;

Комментарии

  1. Dreyka
    Май 18th, 2007 | 13:20

    А как полностью заблокировать (разблокировать) ввод с клавиатуры

  2. Simply-Art
    Май 21st, 2007 | 13:27

    Я не знаю лучшего способа это сделать чем выдернуть шнур от клавиатуры, как это сделать программно? вроде так
    procedure Block;//блокируем
    asm
    push 1
    call BlockInput
    end;
    procedure UnBlock;//разблокируем
    asm
    push 0
    call BlockInput
    end;
    это всё из user32.dll и надо вроде в начале подписать
    procedure BlockInput; external ‘user32.dll’;
    а может и не надо 🙂