imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 14.03.2005, 20:16     # 1
Merlyel
Junior Member
 
Регистрация: 10.08.2003
Сообщения: 189

Merlyel Реально крут(а)Merlyel Реально крут(а)Merlyel Реально крут(а)Merlyel Реально крут(а)
Блокировка клавиатуры

Можно ли каким-либо образом заблокировать клавиатуру, т.е. нажимаешь на клавиши, а система не реагирует?
Merlyel вне форума  
Старый 14.03.2005, 20:23     # 2
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Выдерни вилку

PS: На дельфи и си - BlockInput()
RaZEr вне форума  
Старый 14.03.2005, 21:18     # 3
Borland
СуперМод
IMHO Консультант 2005-2009
 
Аватар для Borland
 
Регистрация: 14.08.2002
Адрес: Московская ПЛ, ракетный отсек
Пол: Male
Сообщения: 14 497

Borland - Гад и сволочь
Цитата:
Сообщение от Jinx
Можно ли каким-либо образом заблокировать клавиатуру, т.е. нажимаешь на клавиши, а система не реагирует?
Конечно можно! Достаточно заменить системный обработчик прерываний на "заглушку", которая нифига не делает... Самое сложное - это написать такую "заглушку" и загрузчик для неё, а потом убедить ОС допустить замену...
А ещё можно просто выключить драйвер клавиатуры - тож нефигово...

Цитата:
Сообщение от RaZEr
PS: На дельфи и си - BlockInput()
Насколько помню, от Ctrl-Alt-Del она не лечит... Скажем, для консольной проги будет блокирован только ввод в конкретной консоли...
__________________
Не засоряйте форум "спасибами"! Для выражения благодарности существуют ПС и репутация! Соблюдайте Правила!
Распространенье наше по планете
Особенно заметно вдалеке:
В общественном парижском туалете
Есть надписи на русском языке

В. Высоцкий

Borland вне форума  
Старый 14.03.2005, 21:27     # 4
CEO
Full Member
 
Аватар для CEO
 
Регистрация: 31.08.2003
Адрес: где-то между Марсом и Юпитером
Сообщения: 998

CEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собой
На Паскале и под ДОС:
Цитата:
uses Dos;
const
JmpFar : record
OpCode : Byte;
BakInt9 : pointer;
end = (OpCode : $EA; BakInt9 : nil);
procedure MyInt9; far; assembler;
asm
push ax
in al,60h
cmp al,53h {клавиша Del}
jne @Exit
push ds
xor ax,ax
mov ds,ax
mov al,ds:[417h]
and al,0Ch
cmp al,0Ch {Ctrl+Alt ?}
jne @No
in al,61h
mov ah,al
or al,80h
out 61h,al
xchg ah,al
out 61h,al
mov al,20h
out 20h,al
pop ds
pop ax
iret
@No:
pop ds
@Exit:
pop ax
push seg JmpFar
push Offset JmpFar
end;
var
BakExitProc : pointer;
procedure ExitReboot; far; {выполняется пpи завеpшении}
begin
SetIntVec($9,JmpFar.BakInt9);{веpнуть обpаботчик клавиатуpы на pодину}
ExitProc:=BakExitProc;
end;
begin
BakExitProc:=ExitProc;
ExitProc:=@ExitReboot;
GetIntVec($9,JmpFar.BakInt9);{запомнить адpес обpаботчика клавиатуpы}
SetIntVec($9,@MyInt9);{установить свой обpаботчик клавиатуpы}
end.
На Паскале и под Windows:
Цитата:
unit LockSys;
interface
uses
Windows;

type TLockMode = (lmInput, lmSystemKeys, lmBoth);

function FuncAvail(_dllname, _funcname: string; var _p: pointer): boolean;
Function LockSystem(LockMode:TLockMode):Boolean;*
Function UnLockSystem(UnLockMode:TLockMode):Bool*ean;


var
xBlockInput : function(Block: BOOL): BOOL; stdcall;

implementation

function FuncAvail(_dllname, _funcname: string; var _p: pointer): boolean;
var _lib: tHandle;
begin
Result := false;
_p := NIL;
if LoadLibrary(PChar(_dllname)) = 0 then exit;
_lib := GetModuleHandle(PChar(_dllname));
if _lib <> 0 then
begin
_p := GetProcAddress(_lib, PChar(_funcname));
if _p <> NIL then Result := true;
end;
end;

Function LockSystem(LockMode:TLockMode):Boolean;*
begin
Result:=False;

IF LockMode = lmSystemKeys then //Locking system
IF not SystemParametersInfo(SPI_SCREENSAVERRUN*NING, 1, nil, 0) then Exit;

IF LockMode=lmInput then //locking keyb and mouse
if FuncAvail(''USER32.DLL'', ''BlockInput'', @xBlockInput) then xBlockInput(true)
else Exit;

If LockMode = lmBoth then
begin
IF not SystemParametersInfo(SPI_SCREENSAVERRUN*NING, 1, nil, 0) then Exit;
if FuncAvail(''USER32.DLL'', ''BlockInput'', @xBlockInput) then xBlockInput(true)
else Exit;
end;

Result := True;
end;

Function UnLockSystem(UnLockMode:TLockMode):Bool*ean;
begin
Result:=False;

IF UnLockMode = lmSystemKeys then //UnLocking system
IF not SystemParametersInfo(SPI_SCREENSAVERRUN*NING, 0, nil, 0) then Exit;

IF UnLockMode=lmInput then //unlocking keyb and mouse
if FuncAvail(''USER32.DLL'', ''BlockInput'', @xBlockInput) then xBlockInput(false)
else Exit;

IF UnLockMode=lmBoth then
begin
IF not SystemParametersInfo(SPI_SCREENSAVERRUN*NING, 0, nil, 0) then Exit;
if FuncAvail(''USER32.DLL'', ''BlockInput'', @xBlockInput) then xBlockInput(false)
else Exit;
end;

Result := True;
end;

end.
__________________
Старые игры раздают здесь

Последний раз редактировалось CEO; 14.03.2005 в 21:33.
CEO вне форума  
Старый 14.03.2005, 22:38     # 5
Merlyel
Junior Member
 
Регистрация: 10.08.2003
Сообщения: 189

Merlyel Реально крут(а)Merlyel Реально крут(а)Merlyel Реально крут(а)Merlyel Реально крут(а)
Мдя... все время забываю писать, что желательно С.... ну ниче.... сам виноват... придется разобраться в Паскале и припахать это к С
Merlyel вне форума  
Старый 14.03.2005, 22:54     # 6
chesnok
Member
 
Аватар для chesnok
 
Регистрация: 01.01.2004
Адрес: Воронеж, Россия
Сообщения: 206

chesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форуме
CEO
Все эти SPI_SCREENSAVERRUNNING работают только в виндах 9х :D
В NT-based не сработает также и метод Борланда с хуками, ибо заветная комбинация обрабатывается сразу из RIT
Отключение драйвера поможет 100%, но вот разрешит ли тебе это сделать система?
__________________
<SPEEDing|VoNK> you cant use knoppix as a server can you?
<bob> why not? people use windows as one.
chesnok вне форума  
Старый 14.03.2005, 22:58     # 7
CEO
Full Member
 
Аватар для CEO
 
Регистрация: 31.08.2003
Адрес: где-то между Марсом и Юпитером
Сообщения: 998

CEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собой
Цитата:
Jinx:желательно С
На С++:
Цитата:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// BlockAll (true) - отключить.
// BlockAll (false) - включить.
HINSTANCE Hnd;
DWORD Result;
DWORD __stdcall (*BlockAll)(bool Status); // прототип ф-ии
Hnd = LoadLibrary("User32.dll");
BlockAll = (DWORD __stdcall (*)(bool Status))GetProcAddress(Hnd,"BlockInput");
if(!BlockAll)
{ FreeLibrary(Hnd);
return;
}
if(BlockAll(true)) Sleep(10000);
BlockAll(false);
FreeLibrary(Hnd);
}
__________________
Старые игры раздают здесь
CEO вне форума  
Старый 15.03.2005, 02:07     # 8
Borland
СуперМод
IMHO Консультант 2005-2009
 
Аватар для Borland
 
Регистрация: 14.08.2002
Адрес: Московская ПЛ, ракетный отсек
Пол: Male
Сообщения: 14 497

Borland - Гад и сволочь
Цитата:
chesnok:
метод Борланда с хуками,
Секундочку, какие нафиг хуки? Хуки - это уже не прерывания (аппаратные)... Здесь же всё-таки ближе к подмене драйвера PIC...
__________________
Не засоряйте форум "спасибами"! Для выражения благодарности существуют ПС и репутация! Соблюдайте Правила!
Распространенье наше по планете
Особенно заметно вдалеке:
В общественном парижском туалете
Есть надписи на русском языке

В. Высоцкий

Borland вне форума  
Старый 15.03.2005, 02:40     # 9
CEO
Full Member
 
Аватар для CEO
 
Регистрация: 31.08.2003
Адрес: где-то между Марсом и Юпитером
Сообщения: 998

CEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собой
Цитата:
Borland:ближе к подмене драйвера
Нехилая задачка однако получится тогда...
Вот здесь: http://www.sources.ru/cpp/system/ctr...el_winxp.shtml
написано как сделать низкоуровневую ловушку для клавиатуры, так, чтобы она работала под Windows XP...
__________________
Старые игры раздают здесь
CEO вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 18:27.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.