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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Keyboard off 
:(
    Опции темы
BigTon
Дата 29.4.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 15.4.2007

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



Отрубать мышь не надо, она активно используется для работы с моим приложением. А что касательно "поставь хук", так это я и так знаю, знаю что надо поставить низкоуровневый хук, который будет запускаться из dll и т.д. Много по этому поводу читал и пробовал на своём компе. Но, как я писал в первом посте, существует куча подобных топиков, но проблема там не решена, все только советуют что сделать. А мне нужно конкретное решение поставленной задачи - отрубить клавиатуру.
PM MAIL   Вверх
dumb
Дата 29.4.2007, 14:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Цитата(BigTon @  29.4.2007,  11:48 Найти цитируемый пост)
Но, как я писал в первом посте, существует куча подобных топиков, но проблема там не решена, все только советуют что сделать. А мне нужно конкретное решение поставленной задачи - отрубить клавиатуру. 

топай в "Центр Помощи" или в "Работу".
PM MAIL   Вверх
BigTon
Дата 30.4.2007, 14:24 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 15.4.2007

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



Такого рода советы не нужны, если не знаешь как сделать, то и писать не надо!
PM MAIL   Вверх
BigTon
Дата 30.4.2007, 16:21 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 15.4.2007

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



Я нашёл решение своей задачи и для будующих соискателей выкладываю код:
Код

// используемые переменные
var
  Dummy:integer=0;
  OldKbHook: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;

// включение клавы
procedure TForm1.KeyBoardOn(Sender: TObject);
begin
  if OldKbHook <> 0 then
  begin
    UnHookWindowshookEx(OldKbHook);
    OldKbHook := 0;
  end;
  SystemParametersInfo(SPI_SETFASTTASKSWITCH, 0, 0, 0);
  SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0);
end;

// выключение клавы
procedure TForm1.KeyBoardOff(Sender: TObject);
begin
  SystemParametersInfo(SPI_SETFASTTASKSWITCH, 1, @Dummy, 0);
  SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, @Dummy, 0);
  OldKbHook := SetWindowsHookEx(13, @KbHook, HInstance, 0);
end;


Код работает, только что проверил и теперь использую. Но CAD он не отключает. В принцепе это не проблема и мне Task Manager не мешает.
PM MAIL   Вверх
Misha_White
Дата 2.5.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо... Надо попробовать... Если получится, то напишу... А не получится, то все равно напишу!!! smile 
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
MetalFan
  Дата 4.5.2007, 08:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(BigTon @  30.4.2007,  16:21 Найти цитируемый пост)
Я нашёл решение своей задачи

13 - это и есть WH_KEYBOARD_LL.
а самому то же самое написать? в MSDN ВСЕ расжевано по полочкам.
а по поводу SPI... эти вроде только для Win9x




--------------------
There are always someone smarter than you...
PM MAIL   Вверх
ama_kid
Дата 4.5.2007, 09:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 19
Всего: 95



На всякий случай для будущих поколений запощу сюда код из своего когда-то написанного проекта, который отрубает только системные клавиши (Alt-Tab, Ctrl-Esc, Win etc...), оставляя программе возможность работать с клавиатурой (только под NT... и без отрубания CAD - для него хуком не обойтись):
Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  KBDLLHOOKSTRUCT = record    
    vkCode: DWORD;    
    scanCode: DWORD;    
    flags: DWORD;    
    time: DWORD;    
    dwExtraInfo:Pointer;    
  end;
  PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;

const
  LLKHF_ALTDOWN  = KF_ALTDOWN shr 8;
  WH_KEYBOARD_LL = 13;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  HookHandle: hHook = 0;
  Hooked: boolean = false;

implementation

function KeyboardProc(nCode: integer; wParam: longint; lParam: longint): integer; stdcall;
var    
  KeyStroke: boolean;    
  p: PKBDLLHOOKSTRUCT;
begin    
  KeyStroke := false;    
  if (nCode = HC_ACTION) then    
  begin    
      case wParam of    
        WM_KEYDOWN, WM_SYSKEYDOWN,    
        WM_KEYUP,    WM_SYSKEYUP:    
        begin    
          p := PKBDLLHOOKSTRUCT(lParam);    
          KeyStroke :=    
              ( (p^.vkCode = VK_LWIN) or (p^.vkCode = VK_RWIN)) or    
              ( (p^.vkCode = VK_TAB) and ((p^.flags and LLKHF_ALTDOWN) <> 0) ) or    
              ( (p^.vkCode = VK_ESCAPE) and ((p^.flags and LLKHF_ALTDOWN) <> 0) ) or    
              ( (p^.vkCode = VK_ESCAPE) and ((GetKeyState(VK_CONTROL) and $8000) <> 0) ) or    
              ( (p^.vkCode = VK_F4) and ((p^.flags and LLKHF_ALTDOWN) <> 0) );// or
        end;
      end;//case    
  end;
  if KeyStroke then    
    result := 1    
  else    
    result := CallNextHookEx(0, nCode, wParam, lParam);    
end;    


procedure Hook(lRun:Boolean); export; stdcall;    
begin    
 if lRun then
  if not Hooked then
   begin
    HookHandle:=SetWindowsHookEx(WH_KEYBOARD_LL, @KeyboardProc, HInstance, 0);
    Hooked:=true;
   end;
 if not lRun then
   if Hooked then
    begin
     UnhookWindowsHookEx(HookHandle);
     Hooked:=false;
     HookHandle:=0;
   end;
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Hook(true);
end;
end.



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
RinOSpro
Дата 28.8.2007, 09:01 (ссылка)    |    (голосов: 3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Уважаемые Модераторы Я долго и мучительно писал код который отрубает клаву, блокирует все системные сочетания в том числе ctrl-alt-del, alt-tab,ctrl-esc, могу поделится. Только плиз сделайте меня опытным.
  Вверх
ne0n
Дата 28.8.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 4
Всего: 11



 smile 
RinOSpro,  если хочешь поделиться своими работами то в "Арсенал форумистов"
А просто так "Опытным" тебя не сделают...!!! а если так уж тебе горит поменять свой статус заплптии 1 бакс и меняй!!!в настройках профиля сам найдешь!!!

з.ы. 
Простите меня за  грубость конечно, но это все-таки форум, а не базар где бы мы торговались...и говорили я вот тебе помогу тока ты мне плюсик поставь...или если меня сделают модератором!
PM MAIL ICQ   Вверх
RinOSpro
Дата 19.9.2007, 10:57 (ссылка)    |    (голосов: 2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











короче я это делаю с помощью библиотеки inpout32.dll она нужна чтобы на прямую записывать в порты. Если кто даст пример доступа к портам в XP, то мой пример отключения клавы всего 2 строки кода. Но тут загвоздка клавиатура должна быть ps/2 т.к. мы обрашаемся на прямую к портам не через драйвер.
  Вверх
MetalFan
Дата 19.9.2007, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



RinOSpro, а смысл тогда кода? у меня вот например везде клавы usbшные...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
RinOSpro
Дата 19.9.2007, 14:43 (ссылка)    |    (голосов: 1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(MetalFan @  19.9.2007,  13:31 Найти цитируемый пост)
а смысл тогда кода? у меня вот например везде клавы usbшные... 

Да ладно везде ну смотря зачем ему клаву лочить если для трояна то не скажу как. А если для дела тогда да. У меня такая не обходимость возникла когда я писал тестер и нужно было отрубить клаву (чтоб не лазили куда не надо) и оставить мышь.

А кто мешает найти порты используемые устройством да хоть usb. Просто тогда у меня еще знаний не хватало да и щас )) не знаю смогу ли. А вообще алгоритм такой.
найти порт клавы или мыши и послать код. Только вопрос с хрюшей еще остался писать в i/o порты.
  Вверх
RinOSpro
Дата 19.9.2007, 15:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Завтра примерчик дам для ps/2
  Вверх
RinOSpro
Дата 19.9.2007, 18:54 (ссылка)    |    (голосов: 2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как и обещал вот.
если что + слева от вас smile



Присоединённый файл ( Кол-во скачиваний: 46 )
Присоединённый файл  Keyboard_Off.rar 13,43 Kb
  Вверх
RinOSpro
Дата 25.9.2007, 07:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Странно ни одного отзыва...
  Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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