Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Блокировка средств ввода в real-time, Клавиатуры и мышки 
V
    Опции темы
Ak47black
  Дата 7.11.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



Здравствуйте.
Хочу попытатся сделать процедуру которая блокирует и отключает блокировку клавиатуры и мыски в системе во время выполнения программы.
С мышкой то вижу что через hook можно сделать. А вот с клавиатурой то посложнее намного ситуация.
Как заставить отключится Ctrl+Alt+Delete? В Xp то не плохо с этим справляется код от Yanis тут, а в Viste уже этот код не работает.
Если учитывать что
Цитата

WHen you press these 3 keys, they create a special electrical circuit that generates what is called an interrupt. THis is a signal to the CPU that something wants attention. The windows kernel drivers intercept this interrupt and go through the motions of whatever chunk of code is run, that shows the ctrl+alt+del screen. It cannot be replicated in software without writing your own kernel level keyboard driver or something.

то есть-ли тут еше какое-нибудь решение без написания драйвера?
Может ктонибудь еше знает какой-нибудь выход?  smile 
PM MAIL   Вверх
Bose
Дата 7.11.2007, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(Ak47black @  7.11.2007,  18:28 Найти цитируемый пост)
то есть-ли тут еше какое-нибудь решение без написания драйвера?Может ктонибудь еше знает какой-нибудь выход?   

Наверняка можно где-нибудь в реестре это отключить.

Это сообщение отредактировал(а) Bose - 7.11.2007, 18:33
PM MAIL WWW Skype   Вверх
Ak47black
Дата 7.11.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



Bose, чтото такое есть, но это действует только при рестарте или Logoff.
Я хотелбы сделать в Real-time.
PM MAIL   Вверх
Romikgy
Дата 11.11.2007, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146





--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
MetalFan
Дата 11.11.2007, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



первый пример из фака
upd: конечно не грубейшие ошибки, а просто нагло непередает дальше по цепочке хуков событие.

Это сообщение отредактировал(а) MetalFan - 12.11.2007, 19:09


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Alexeis
Дата 11.11.2007, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



MetalFan, давай обсудим и поправим фак, если там действительно есть ошибки.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ak47black
Дата 12.11.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



Я сделал без блокировки Ctrl+Alt+Delete, но блокировкой клавиатуры и мышки с помошью hook примерно как в том факе  smile . 
Ведь если окно taskmanager даже и вылезет то толку от этого каму-то мало будет (по крайне мере в Nt версиях windows).
Сорри если что, там галочка помечена.

Это сообщение отредактировал(а) Ak47black - 12.11.2007, 17:21
PM MAIL   Вверх
Ak47black
Дата 12.11.2007, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



Цитата

MetalFan, давай обсудим и поправим фак, если там действительно есть ошибки. 

А вообще зачем какие страшные dll делать (есть-ли тут необходимость), вот мой модуль, просто надо добавить и юзать
Код

unit Block_Mod;

//This unit contains block and unblock routines
//Written by Nbyte

interface

uses
  Windows;

procedure BlockAllInput;
procedure UnBlockAllInput;

implementation

var
  Dummy: integer = 0;
  OldKbHook: HHook = 0;
  OldMsHook: HHook = 0;

function KbHook(code: Integer; wparam: Word; lparam: LongInt): LongInt; stdcall;
begin
  if code < 0 then
    Result := CallNextHookEx(oldKbHook, code, wparam, lparam)
  else
    Result := 1;
end;

function MsHook(code: Integer; wparam: Word; lparam: LongInt): LongInt; stdcall;
begin
  if code < 0 then
    Result := CallNextHookEx(oldMsHook, code, wparam, lparam)
  else
    Result := 1;
end;

procedure BlockAllInput;
begin
  SystemParametersInfo(SPI_SETFASTTASKSWITCH, 1, @Dummy, 0);
  SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, @Dummy, 0);
  OldKbHook := SetWindowsHookEx(13, @KbHook, HInstance, 0);
  OldMsHook := SetWindowsHookEx(WH_MOUSE, @MsHook, HInstance, 0);
end;

procedure UnBlockAllInput;
begin
  if OldKbHook <> 0 then
  begin
    UnHookWindowshookEx(OldKbHook);
    OldKbHook := 0;
  end;
  if OldMsHook <> 0 then
  begin
    UnHookWindowshookEx(OldMsHook);
    OldMsHook := 0;
  end;
  SystemParametersInfo(SPI_SETFASTTASKSWITCH, 0, 0, 0);
  SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0);
end;

end.


Это сообщение отредактировал(а) Ak47black - 12.11.2007, 17:48
PM MAIL   Вверх
MetalFan
Дата 12.11.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



1. Желательно ВСЕГДА вызывать CallNextHookEx.
2. Нет необходимости передавать в нее первый параметр.

для блокировки мыши с клавой лучше использовать WH_KEYBOARD_LL (13) и WH_MOUSE_LL(14)



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ak47black
Дата 12.11.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



Да тут немного еше можно доделать. Ну а так вроде работает нормально. Можно и в фак добавить.
Цитата

WH_KEYBOARD_LL (13) и WH_MOUSE_LL(14)

Ага так лучше будет. 

Это сообщение отредактировал(а) Ak47black - 12.11.2007, 18:15
PM MAIL   Вверх
MetalFan
Дата 12.11.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



мой вариант простейшей библиотеки для блокировки ввода (кроме CAD соотв):
не поступаем по-свински к другим приложениям, которые тоже возможно установили хук такого типа.
Код

library InputBlockerDLL;

uses
  Windows;

const
  WH_KEYBOARD_LL = 13;
  WH_MOUSE_LL    = 14;

  var
    GKbHk: Cardinal = 0;
    GMsHk: Cardinal = 0;

  function KbHook( nCode: Integer; wParam: WPARAM; lParam: LPARAM ): LRESULT; stdcall;
  begin
    Result := CallNextHookEx( 0, nCode, wParam, lParam );
    if nCode = HC_ACTION then
      Result := 1;
  end;

  function MsHook( nCode: Integer; wParam: WPARAM; lParam: LPARAM ): LRESULT; stdcall;
  begin
    Result := CallNextHookEx( 0, nCode, wParam, lParam );
    if nCode = HC_ACTION then
      Result := 1;
  end;


  function TrySetHook( idHook: Integer; HookProc: Pointer; HookHandle: PDWORD ): Boolean;
  begin
    HookHandle^ := SetWindowsHookEx( idHook, HookProc, HInstance, 0 );
    Result := HookHandle^ <> 0;
  end;

  function TryRemoveHook( HookHandle: PDWORD ): Boolean;
  begin
    Result := True;
    if HookHandle^<>0 then
    begin
      Result := UnhookWindowsHookEx( HookHandle^ );
      if Result then
        HookHandle^ := 0;
    end;
  end;

  function Block: Boolean; stdcall;
  begin
    Result := (GKbHk = 0) and (GMsHk = 0);
    if not Result then Exit;
    Result := TrySetHook( WH_KEYBOARD_LL, @KbHook, @GKbHk ) and
              TrySetHook( WH_MOUSE_LL, @MsHook, @GMsHk );
    if not Result then
    begin
      TryRemoveHook( @GKbHk );
      TryRemoveHook( @GMsHk );
    end;
  end;

  function Unblock: Boolean; stdcall;
  begin
    Result :=TryRemoveHook( @GKbHk ) and TryRemoveHook( @GMsHk );
  end;

  exports Block, Unblock;

begin
  GKbHk := 0;
  GMsHk := 0;
  
end.




--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Alexeis
Дата 12.11.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



MetalFan, а где в коде фака? И в чем ее суть?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ak47black
Дата 12.11.2007, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



Цитата

не поступаем по-свински к другим приложениям, которые тоже возможно установили хук такого типа.

Если я правильно понял, то зачем давать обрабатывать другим hooks в режиме блокировки клавиатуры например?

Это сообщение отредактировал(а) Ak47black - 12.11.2007, 19:47
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0886 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.