Сайт управляется системой uCoz
*** ***

Включение и выключение клавиатуры

А кофе на клавиатуру тоже вирус пролил?

// используемые переменные
var
  Dummy: integer = 0;
  OldKbHook: HHook = 0;

implementation

function KbHook(code: Integer; wparam: Word; lparam: LongInt): LongInt; stdcall;
begin
  if code < 0 then
    Result := CallNextHookEx(oldKbHook, code, wparam, lparam)
  else
    Result := 1;
end;

// включение клавы

procedure TForm1.KeyBoardOn(Sender: TObject);
begin
  if OldKbHook <> 0 then
  begin
    UnHookWindowshookEx(OldKbHook);
    OldKbHook := 0;
  end;
  SystemParametersInfo(SPI_SETFASTTASKSWITCH, 0, 0, 0);
  SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0);
end;

// выключение клавы

procedure TForm1.KeyBoardOff(Sender: TObject);
begin
  SystemParametersInfo(SPI_SETFASTTASKSWITCH, 1, @Dummy, 0);
  SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, @Dummy, 0);
  OldKbHook := SetWindowsHookEx(WH_KEYBOARD, @KbHook, HInstance, 0);
end;

Некоторые замечания по поводу этих процедур:
Если программу упаковать UPX-ом - клава не будет отключаться (причин не знаю).
В ДОС-окне клава будет работать (FAR, VC и т.п.) :(
Состояния клавиш NumLock,CapsLock,ScrollLock не отслеживаются и могут быть изменены.
Возможно EnableHardwareKeyboard более эффективен и прост, но я тоже, к сожалению, не знаю, как им пользоваться.
Если вместо WH_KEYBOARD поставить WH_MOUSE, то можно выключать таким образом мышь :-)

Copyright © 2007. Voloshin.
long2005@tut.by