Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как заблокировать клаву и мышь в ХР? [D5, D6, WinXP]


Страницы:   1 2

mwolf ©   (2003-01-18 02:14:00) 

All.
Требуется заблокировать клаву и мышь в WinХР. Для 98 писал прогу с хуками, в ХР хуков нет, поэтому хотелось бы какие нибудь идеи по поводу как это сделать. Если кто писал в NT, может там было что-то похожее.


DVM   (2003-01-29 16:49:00) [1]


> Игорь Шевченко

Нет у меня такой книжечки:(
Может в онлайне где завалялась?


Игорь Шевченко   (2003-01-29 16:46:00) [2]

DVM © (29.01.03 15:41)

Книжечку почитай, потом продолжим дискуссию :-)


DVM   (2003-01-29 15:41:00) [3]

Да конечно же надо знать и названия процессов, а если их хитро назвать, то тому кто будет все это ломать будет затруднительно найти нужные процессы.
Насчет одновременности у меня большое сомнение - процессор выполняет инструкции последовательно и одновременно ничего на PC не бывает (многопроцессорные не в счёт).


Игорь Шевченко   (2003-01-29 15:24:00) [4]


> Прибить одновременно невозможно


Элементарно, Ватсон. Свен Шрайбер - недокументированные возможности Windows 2000


DVM   (2003-01-29 14:45:00) [5]


> Во-первых, и это не затруднительно.

Да, конечно же написать еще одну программу, и зная названия процессов прибивать их один за другим.
Прибить одновременно невозможно. А если они будут следить еще и друг за другом и запускать друг друга вновь?
Запустить мгновенно правда тоже не получится.
Вообще это пустой разговор, т.к. надо отталкиваться от конкретных условий в которых это будет все работать.


Игорь Шевченко   (2003-01-29 13:52:00) [6]

DVM © (29.01.03 11:57)

> добавить штук 7 процессов которые будут следить за программой
> - все вместе убить очень затруднительно :)


Во-первых, и это не затруднительно.
Во-вторых, может сразу свою ОС написать, в которой нельзя будет снимать программы? Лучше всего, на мой взгляд.


DVM   (2003-01-29 11:57:00) [7]


> Тогда люди возьмут Process Explorer, выявят вредную программу
> и убьют ее.

добавить штук 7 процессов которые будут следить за программой - все вместе убить очень затруднительно :)


Игорь Шевченко   (2003-01-29 09:43:00) [8]


> А если сделать монитор запуска приложений (в отдельном процессе)
> и не давать запуститься TaskManager...


Тогда люди возьмут Process Explorer, выявят вредную программу и убьют ее.
Впрочем, для выявления можно воспользоваться и программой из кладовки QuerySystemInformation, которая показывает список всех-всех процессов :-)))


Acidy   (2003-01-29 05:59:00) [9]

А если сделать монитор запуска приложений (в отдельном процессе) и не давать запуститься TaskManager...


melifaro   (2003-01-20 05:22:00) [10]

Я вот тоже столкнулся с данной проблемой. Скорее с проблемой универсальности хука для 9X и NT одновременно. Пришёл вот к какому выводу - если блокировать через DLL - то проще всего определить тип ОС (NT или 9X) и отключить TaskManager тем способом, который подходит для этой ОС.
Пример:

library block;

uses
Registry,
Messages,
SysUtils,
Windows;

var
MouseHandle, HookHandle : HHook;

Function RunningWindowsNT : Boolean;
var
OSVer : TOSVERSIONINFO;
begin
OSVer.dwOSVersionInfoSize := SizeOf ( OSVERSIONINFO );
GetVersionEx ( OSVer );
Result := ( OSVer.dwPlatformId = VER_PLATFORM_WIN32_NT );
end;

procedure NTTaskMgr ( Enabled : Boolean );
Var
Reg : TRegistry;
Flag : Integer;
Begin
Case Enabled Of
True : Flag := 0;
False : Flag := 1;
End;
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey ( "Software\Microsoft\Windows\CurrentVersion\Policies\System", True );
Reg.WriteInteger ( "DisableTaskMgr", Flag );
Reg.CloseKey;
Reg.Free;
End;

Procedure Win32TaskMgr ( Enabled : boolean );
Var
Old : Boolean;
Flag : Integer;

begin
Old := True;
Case Enabled of
True : Flag := 0;
False : Flag := 1;
end;
SystemParametersInfo ( SPI_SCREENSAVERRUNNING, Flag, @Old, 0 );
End;

function KeybHook( nCode : Integer; wParam : WPARAM; lParam : LPARAM ) : LRESULT; stdcall;
begin
nCode := 0;
end;

function myMouseHook( nCode : Integer; wParam : WPARAM; lParam : LPARAM ) : LRESULT; stdcall;
begin
nCode := 0;
end;

function BlockKeyboard : Bool; stdcall;
Var
Old : Boolean;
begin
Old := True;
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, @old, 0 );
if Result then HookHandle := SetWindowsHookEx( WH_KEYBOARD, KeybHook, HInstance, 0 );
Case RunningWindowsNT of
True : NTTaskMgr ( False );
False : Win32TaskMgr ( False );
End;
end;

function BlockMouse : Bool; stdcall;
Var
Rect : TRect;
aRect : PRect;
P : TPoint;

Begin
ShowCursor( False );
GetCursorPos ( P );
Rect.Left := P.X;
Rect.Top := P.Y;
Rect.Right := P.X + 1;
Rect.Bottom := P.Y + 1;
aRect := @Rect;
ClipCursor( aRect );
if Result then MouseHandle := SetWindowsHookEx( WH_MOUSE, myMouseHook, HInstance, 0 );
end;

procedure UnBlockKeyboard; stdcall;
Var
Old : Boolean;
begin
Old := true;
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 0, @old, 0 );
UnhookWindowsHookEx( HookHandle );
Case RunningWindowsNT of
True : NTTaskMgr ( True );
False : Win32TaskMgr ( True );
End;
end;

procedure UnBlockMouse; stdcall;
Begin
ShowCursor( True );
ClipCursor( Nil );
UnhookWindowsHookEx( MouseHandle )
end;

exports
BlockMouse,
UnBlockMouse,
BlockKeyboard,
UnBlockKeyboard;

Begin
end.


Это конечно грубо, но работает и под 95/98/ME/NT/2k/XP


neodiX   (2003-01-19 15:48:00) [11]

Как я и знал. Не, просто подумал тут че нить новое изобрели.


Song   (2003-01-19 15:44:00) [12]

Это возможно только драйвером клавиатуры.


neodiX   (2003-01-19 14:18:00) [13]

2 Pasechnik
Используя такой вариант Ctrl + Alt + Del все равно срабатывает, только в логон окне нет "Task manager", a мне надо намертво убить Ctrl + Alt + Del.


neodiX   (2003-01-19 14:10:00) [14]

2 R4D][
Если ввод заблокирован, то его можно разблокировать вручную - нажать Ctrl + Alt + Del, при появлении меню "Завершение работы программы" ввод разблокируется.


R4D][   (2003-01-19 13:45:00) [15]

Чтобы, и клава, и мышь отрубились - используй EnableHadwareInput

P.S. Я это к тому, что, наверняка, есть специальная функция в WinAPI только для клавы.


Pasechnik   (2003-01-19 13:37:00) [16]

выполни gpedit.msc, далее > administrative templates > system > logon/logoff > disable task manager в enabled, и смотри REGMONITORом с http://www.sysinternals.comчего он там меняет.


neodiX   (2003-01-19 13:18:00) [17]

2 song
на w98 я и сам знаю что без проблем, а тут вот тема пошла про ХP, да еще и через реестр. Я уже и ДДК использовал, но дошел только до создания статических драйверов для клавы, а как дин. делать так и непонял. Ну что бы они срабатывали не после рестарта, а предположим нажав кнопельку в моей проге. Стат. драйвер я загружаю без проблем. Видно дин. надо как то по другому делать. И действительно, если у тебя есть примерчик как через реестр, будь добр скинь на мыло neodiX@mail.ru


Song   (2003-01-19 10:55:00) [18]

2neodiX © (18.01.03 21:33)
Используй на машинах w98, там три пальца блокируются без проблем.


Diamond Cat   (2003-01-19 04:50:00) [19]

2 Song, персоональный привет, а правда, как это через реестр, если есть пример кинь на мыло плз. или примерное описание как это сделать
Diamond_cat@newmail.ru


Diamond Cat   (2003-01-19 04:44:00) [20]

Во интересно, у меня стоит (в хорошем смысле этого слова) XP и ловушка на клаву отлично работает, видимо она не знает что под ХР ей не положено работать, уважаемый Vasily Terekhov может подскажете мне как объяснить моей тупой ловушке , что она не должна работать под хр используя клавиатурный хук :о)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо