Консультация № 69896
07.01.2007, 17:56
0.00 руб.
0 3 3
Как програмно можно отключить а затем включить клавиатуру с мышкой? спасибо.

Обсуждение

Неизвестный
07.01.2007, 18:35
общий
это ответ
Здравствуйте, Танасюк Олег Олегович!
Знвчит на счет мяши все просто. Мною уже давно была написана программа "Мышеловка", которая при запуске ограничивает или совсем запрещает движение мяши. Основой ее была API-функция ClipCursor. Единственный ее параметр - это указатель на структуру TRect, в которой указаны экранные координаты отсекаемой области для действия мыши. Вот примерные процедуры остановки и возобновления работы мыши:
procedure StopMouse; //см. приложение
procedure RunMouse; //см. приложение
С клавиатурой же все сложнее.
Скорее всего для ее полного отключения придется написать целый дополнительный модуль. Не знаю API-функций для выключения клавиатуры и по этой причине могу предложить только решить эту проблему только с помощью Hooks (ловушек) системных событий.

Приложение:
procedure StopMouse;var Pos:TPoint; Lock:TRect;begin GetCursorPos(Pos); Lock.Left:=Pos.X-1; Lock.Top:=Pos.Y-1; Lock.Right:=Pos.X; Lock.Bottom:=Pos.Y; ClipCursor(@Lock);end;procedure RunMouse;var Lock:TRect;begin Lock.Left:=0; Lock.Top:=0; Lock.Right:=GetSystemMetrics(SM_CXSCREEN); Lock.Bottom:=GetSystemMetrics(SM_CYSCREEN); ClipCursor(@Lock);end;
Неизвестный
07.01.2007, 22:14
общий
это ответ
<font color=red>
Ответ удален, т.к. не является ответом по теме рассылки.
--------------
<i><a href=http://rusfaq.ru/info/user/21323>Alexey G. Gladenyuk</a></i></font>
Неизвестный
08.01.2007, 06:02
общий
это ответ
Здравствуйте, Танасюк Олег Олегович!
Код для включения-выключения того и другого в приложении.

Приложение:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; m_OldMHook: HHook = 0; k_OldKBHook: HHook = 0; function KbHook(code: Integer; wparam: Word; lparam: LongInt): LongInt; stdcall;procedure KeyBoardOn;procedure KeyBoardOff;function MouseHook(code: Integer; wparam: Word; lparam: LongInt): LongInt; stdcall;procedure MOUSEON;procedure MouseOff;implementation{$R *.dfm}function KbHook(code: Integer; wparam: Word; lparam: LongInt): LongInt; stdcall;begin if code < 0 then Result := CallNextHookEx(k_oldKbHook, code, wparam, lparam) else Result := 1;end;// включение клавыprocedure KeyBoardOn;begin if k_OldKbHook <> 0 then begin UnHookWindowshookEx(k_OldKbHook); k_OldKbHook := 0; end;end;// выключение клавыprocedure KeyBoardOff;begin k_OldKbHook := SetWindowsHookEx(WH_KEYBOARD, @KbHook, HInstance, 0);end;function MouseHook(code: Integer; wparam: Word; lparam: LongInt): LongInt; stdcall;begin if code < 0 then Result := CallNextHookEx(m_oldMHook, code, wparam, lparam) else Result := 1;end;// включение мышкиprocedure MOUSEON;begin if m_OldMHook <> 0 then begin UnHookWindowshookEx(m_OldMHook); m_OldMHook := 0; end;end;// выключение мышкиprocedure MouseOff;begin m_OldMHook := SetWindowsHookEx(WH_MOUSE, @MOUSEHook, HInstance, 0);end;procedure TForm1.Button1Click(Sender: TObject);beginKeyBoardOn;end;procedure TForm1.Button2Click(Sender: TObject);beginKeyBoardOFF;end;procedure TForm1.Button3Click(Sender: TObject);begin MouseOn;end;procedure TForm1.Button4Click(Sender: TObject);begin MouseOff;end;end.
Форма ответа