Главная страница
    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.007 c
7-55323
Александп
2002-03-19 17:54
2002.06.17
Как в WinNt запустить Socket Server, чтобы он работал при стартовом окошке (нажмите Ctrl+Alt+Del)


3-54969
Gamar
2002-05-14 14:56
2002.06.17
Запуск приложения баз данных Парадокс без Дельфи


1-55145
Karlusha
2002-06-04 11:27
2002.06.17
Окна диалога


1-55064
SleD
2002-06-02 14:13
2002.06.17
Насчёт КРУГЛЫХ картинок


14-55267
Fellomena
2002-05-13 18:51
2002.06.17
Поставка прог. продукта заказчику. Что использовать ISO, ГОСТ ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский