15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Блокируем клавиатуру и мышку на определённое время


Автор: Arthur Boynagryan.

Требования: Windows 9x

Введение

Эта программка блокирует клавиатуру и мышку на компьютере под управлением Windows 9x.

Моё начальство поставило задачу, чтобы пользователи не могли работать на компьютерах по окончании рабочего дня (т.е., 7 PM). И в тоже время, чтобы они могли с утра нормально работать (т.е., в 9 AM).

В определённое время отрубаются все специальные комбинации клавишь (Ctrl-Alt-Del, Alt-Tab, Ctrl-Esc, Windows клавиши), затем перехватывает весь ввод с клавиатуры и события типа WM_LBUTTONDOWN, так что пользователь уже не сможет ничего сделать на компьютере. Перезагрузка не поможет, поскольку программка автоматически садится в автозагрузку наподобие троянов.

Для перехвата ввода с клавиатуры и мышки устанавливается глобальная ловушка :) Ловушка - это точка в механизме сообщений, куда приложение может установить подпрограммку мониторинга сообщений, прежде чем они достигнут цели. Для инсталляции используйте функцию SetWindowsHookEx() . Она использует 4 параметра:

    int idHook: Определяет тип устанавливаемой ловушки. Параметры: WH_KEYBOARD для клавиатуры и WH_MOUSE для мышки.

    HOOKPROC lpfn: точка входа процедуры обработки ловушки. В моём случае процедура обработки ловушки находится в dynamic-link library (DLL).

    HINSTANCE hMod: Handle DLL-ки содержащей процедуру, на которую указывает параметр lpfn .

    DWORD dwThreadId: Указывает поток, с которым ассоциируется процедура обработки ловушки. Если этот параметр равен нулю, то процедура ловушки ассоциируется со всеми существующими потоками запущенными в этом же десктопе.

Для запрета специальных комбинаций (Ctrl-Alt-Del, Alt-Tab, Ctrl-Esc, Windows key) используется функция SystemParametersInfo() с флагом SPI_SETSCREENSAVERRUNNING ..

При запуске программа проверяет, не была ли она уже запущена. Если это так, то она завершается. Иначе она проверяет от куда она запустилась и инсталлирует себя в системную директорию и в ключе реестра RunServices. По умолчанию время начала блокировки назначено на 7 PM, и соответственно окончание на 9 AM. Это время можно менять в ключе "HKLM\Software\Windows\CurrentVersion\Explorer\Services". В любой момент можно снять блокировку путём набора на клавиатуре "unl0ck" - ловушка автоматически снимется. Естевственно этот пароль можно в программе изменить.

Не стесняйтесь адаптировать ловушку под свои нужды - это поможет Вам лучше понять принцып её работы.

Downloads

Скачать демонстрашку с исходником - 47 Kb