Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.17;
Скачать: CL | DM;

Вниз

Работа модуля блокировки клавы и мыши. Есть вопросы...   Найти похожие ветки 

 
VID ©   (2002-06-04 20:26) [0]

Приветствую!
Для начала - код юнита:
{
Модуль mklu. Mouse and Keyboard Lock/Unlock
(c) 2002. Автор модуля VID. vidsnap@mail.ru

Модуль предназначен для осуществления частичной блокировки/разблокировки функций клавиатуры и мышки.
Procedure KeyBoardOn - разблокировка (включение) клавиатуры
Procedure KeyBoardOff - блокировка (выключение) клавиатуры
Procedure MouseOn - разблокировка (включение) мышки
Procedure MouseOff - блокировка (выключение) мышки
}

unit mklu;

interface

uses
Windows;

Var
m_Dummy: integer = 0;
m_OldKbHook:HHook = 0;
k_Dummy:Integer = 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

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;
SystemParametersInfo( SPI_SETFASTTASKSWITCH, 0, 0, 0);
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 0, 0, 0);
end;

// выключение клавы
procedure KeyBoardOff;
begin
SystemParametersInfo( SPI_SETFASTTASKSWITCH, 1, @k_Dummy, 0);
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, @k_Dummy, 0);
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_oldKbHook, code, wparam, lparam )
else Result:=1;
end;

// включение мышки
procedure MOUSEON;
begin
if m_OldKbHook <> 0 then
begin
UnHookWindowshookEx( m_OldKbHook );
m_OldKbHook := 0;
end;
SystemParametersInfo( SPI_SETFASTTASKSWITCH, 0, 0, 0);
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 0, 0, 0);
end;

// выключение мышки
procedure MouseOff;
begin
SystemParametersInfo( SPI_SETFASTTASKSWITCH, 1, @m_Dummy, 0);
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, @m_Dummy, 0);
m_OldKbHook := SetWindowsHookEx( WH_MOUSE, @MOUSEHook, HInstance, 0 );
end;

end.

Этот код можно найти в UBPFD.

Ситуация: Есть прога, которая блокирует и разблокирует (в зависимости от нажатой кнопки на форме) клаву, с помощью приведённых выше функций KeyboardOFF и KeyboardOn.
Запускаю две копии (А и Б) этой проги. В копии А нажимаю кнопку блокировки клавы. Всё клава заблокирована. Теперь в копии Б, мышкой (а как же ещё ? :) ) щёлкаю на кнопку разблокировки клавы (UNLOCK). Но клава нифига не хочет разблокироваться. Клавиатура разблокируется, только при нажатии кнопки "UNLOCK" в копии А. Понятное дело, что такая ситуация вытекает из самого кода описанного выше юнита.

ВОПРОС: Как можно/нужно модифицировать код юнита mklu, что бы, описанная ситуация не возникала, т.е. что бы заблокировав клаву из копии А, её можно было спокойно разблокировать из копии Б ?


 
dobriy   (2002-06-04 21:31) [1]

К сожалению скорее всего этого не сделать. Подробнее читай статью о реализации Hook-ов на www.sources.ru.


 
VID ©   (2002-06-04 22:00) [2]

Блин, вот облом...



Страницы: 1 вся ветка

Текущий архив: 2002.06.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.02 c
3-54973
AJ blacksmith
2002-05-13 18:39
2002.06.17
Работа с датой


3-54995
VictorT
2002-05-21 14:42
2002.06.17
Проблемка с индексами.


1-55057
Milg
2002-06-05 14:53
2002.06.17
Как узнать высоту Task Bar’а?


4-55364
gate A20
2002-04-16 18:11
2002.06.17
Ошибка с оконным сообщением


1-55107
DenNNis
2002-06-06 08:17
2002.06.17
PageControl