Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.06.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
1-55189
Stass
2002-06-05 00:06
2002.06.17
MDI


4-55352
chernoruk
2002-04-15 18:50
2002.06.17
Что такое MAPI ???????????????


1-55137
Pastor
2002-06-04 08:26
2002.06.17
Установка D5 на WinXP


3-55043
nedden
2002-05-23 16:41
2002.06.17
Тормозит ClientDataSet+DataSource+Grid


1-55130
mister
2002-06-03 21:00
2002.06.17
FUCK28





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский