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

Поиск:

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


Новичок



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

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



Старый затасканый вопрос: как? Уважаемые гуру, пожалуйста, не надо унижать, стибать, отправлять в F.A.Q., закрывать тему. Я прочёл всё, что выдал поиск на форуме на слово keyboard и не только на этом форуме. Везде эти темы есть, там что то написано, но это не работает. Мне надо просто заблочить клаву. Я не вирус пишу, не троян, я вообще ничего подобно никогда не писал. Мне это надо исключительно для учебных целей (студент, проходящей тестирование, не должен иметь возможность работать с другими прогами, переключаться между задачами и т.д.). В уже существующих темах этот вопрос не рассмотрен до конца! Неужели это секрет какой? Всего то, насколько я понял из прочитанного, нужно подключить правильно написанный для этой цели dll. Ответьте пожалуйста на этот вопрос грамотно и такой вопрос больше не возникнет.

С уважением, в надежде на понимание...
PM MAIL   Вверх
MetalFan
Дата 26.4.2007, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(BigTon @  26.4.2007,  06:55 Найти цитируемый пост)
не должен иметь возможность ... переключаться между задачами

вот это стандартными ср-вами вроде бы не сделать. Alt-Tab не заблокируешь... хотя возможно я ошибаюсь)

можно написать LowLevel hook на клаву и не пропускать "ненужные" клавиши (сочетания клавиш).
з.ы. ищи по WH_KEYBOARD_LL



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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



А зачем блокировать клавиатуру?
Просто постоянно проверять GetForegroundWindow и, если оно не твоё, то устанавливай сразу своё SetForegroundWindow.
Ну и диспетчер задач заблокировать можно, чтоб закрыть не могли.
PM MAIL   Вверх
likehood
Дата 26.4.2007, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


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

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



 smile 
А может кто подскажет софтину для блокировки клавиатуры? А то кот постоянно по клаве бегает, надоело уже.
PM MAIL   Вверх
BigTon
Дата 26.4.2007, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Snowy @ 26.4.2007,  10:18)
А зачем блокировать клавиатуру?
Просто постоянно проверять GetForegroundWindow и, если оно не твоё, то устанавливай сразу своё SetForegroundWindow.
Ну и диспетчер задач заблокировать можно, чтоб закрыть не могли.

А можно по подробней, пожалуйста. Чувствую это просто отличная идея!

likehood, если на клаве есть кнопка fn, то fn+f11 =)
PM MAIL   Вверх
Snowy
Дата 26.4.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Код

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if GetForegroundWindow <> Handle then
  begin
    SetForegroundWindow(Handle);
    LockWorkStation;
  end;
end;

PM MAIL   Вверх
likehood
Дата 26.4.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


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

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



Цитата(BigTon @  26.4.2007,  12:26 Найти цитируемый пост)
likehood, если на клаве есть кнопка fn, то fn+f11 =)

спасибо за совет, только у меня действительно нет такой кнопки
PM MAIL   Вверх
BigTon
Дата 26.4.2007, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Snowy, тот код, что ты привёл не работает (по крайней мере так, как мне надо). А LockWorkStation выкидывает меня в тему выбора узеров(типа: User1, работает 4 проги).
PM MAIL   Вверх
Snowy
Дата 26.4.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Ну так в этом и смысл...
Если решил пойти куда-то помимо текущего окна, то комп блокируется.
Чем не решение smile
PM MAIL   Вверх
BigTon
Дата 27.4.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



это не решение...придётся вернуться к блокированию клавы! Ну скажите кто нибудь как это сделать?!!!
PM MAIL   Вверх
Snowy
Дата 27.4.2007, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



А что тебе даст блокировка клавы?
Можно и без клавы и код набросать и диск отформатировать.
Цель-то какая?
PM MAIL   Вверх
BigTon
Дата 27.4.2007, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Научный руководитель хочет, чтобы во время прохождения тестирования студент не имел возможности работать с другими приложениями. Моя программа работает в полноэкранном режиме. В проге есть виртуальная клава. Так что мне нужно откл клаву.
PM MAIL   Вверх
Misha_White
  Дата 29.4.2007, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Snowy, 

Цитата

А зачем блокировать клавиатуру?
Просто постоянно проверять GetForegroundWindow и, если оно не твоё, то устанавливай сразу своё SetForegroundWindow.
Ну и диспетчер задач заблокировать можно, чтоб закрыть не могли.


А если Действительно нужно клаву отрубить? Тогда нужно Хуки писать (на мышь тоже)? Или все-таки можно без етого обойтись?
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
W4FhLF
Дата 29.4.2007, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Цитата

Научный руководитель хочет, чтобы во время прохождения тестирования студент не имел возможности работать с другими приложениями. Моя программа работает в полноэкранном режиме. В проге есть виртуальная клава. Так что мне нужно откл клаву.


Ну так поставь хук на клаву, как уже советовали выше, во время перехвата сообщения смотри какой окне в фокусе, если не твоё, то возвращай из функции callback в хуке 0 или что там, чтобы сообщение дальше не шло вообщем) 

Это сообщение отредактировал(а) W4FhLF - 29.4.2007, 09:03


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Misha_White
  Дата 29.4.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



W4FhLF, 
А без Хука никак?
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
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











Странно ни одного отзыва...
  Вверх
Akinak
Дата 7.12.2010, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



RinOSpro, Спасибо!!! всеработает. только вот такой вот вопрос, почему после того как производишь разблокировку, клава проделывает всё то что на ней нажимали. нельзя ли это как нибудь убрать? 
Мышь наверняка тоже самое будет проделывать...
PM MAIL   Вверх
Страницы: (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.0831 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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