Блокировка клавиатуры

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Блокировка клавиатуры

Сообщение Lunatic » 22.02.2009 (Вс) 22:44

Мучаюсь с блокировкой клавиатуры(с возможностью потом обратно её включать)

Использую BlockInput, но он отключаеться ESC или СTRL+ALT+DEL, отключаю ESC используя SetKeyboardState, но остаёться СTRL+ALT+DEL. Пытался отключить его ключём в реестре DisableTaskMgr, да диспетчер действительно перестаёт выскакывать, но всё равно BlockInput становиться "в позу" false. Также в реестре есть интересный ключик NoWinKeys(Но он работает только после перезагрузки).
Думаю может использовать UnregisterHotKey, но как тогда вернуть всё на своё место?

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Блокировка клавиатуры

Сообщение ANDLL » 22.02.2009 (Вс) 23:28

СTRL+ALT+DEL и Win+L не пытайся отключить
DisableTaskMgr
Не отключит ctrl+alt+dell если компьютер членствует в домене
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Блокировка клавиатуры

Сообщение Williams » 22.02.2009 (Вс) 23:40

ANDLL писал(а):DisableTaskMgr
Не отключит ctrl+alt+dell если компьютер членствует в домене[/quote]
Без вариантов? Где можно почитать об этом?
И вы думаете, что вас оставят в живых после прочтения этого поста?

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Блокировка клавиатуры

Сообщение Lunatic » 22.02.2009 (Вс) 23:41

Тогда может есть какой-то иной способ блокировки. Зарезать прерывания к клаве, снести драйвер, незнаю еще какие-то идеи

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Блокировка клавиатуры

Сообщение iGrok » 22.02.2009 (Вс) 23:45

Williams писал(а):Без вариантов? Где можно почитать об этом?

Да как тебе сказать.. В общем, да. Без вариантов.

Просто в домене по Ctrl-Alt-Delete появляется не диспетчер задач, а окно с немного другим функционалом. И вот его ты уже программно, не трогая системные файлы и не прибегая к прочим хакам, на которые матерятся SFC и половина антивирусов никуда не денешь.

Lunatic писал(а):Тогда может есть какой-то иной способ блокировки. Зарезать прерывания к клаве, снести драйвер, незнаю еще какие-то идеи

Снести драйвер - это не идея.. Считай, что штатными средствами эту комбинацию отключить невозможно. А на "нештатные" любой антивирус поднимет такой шум, что отключать клавиатуру уже никому не понадобится..
label:
cli
jmp label

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Блокировка клавиатуры

Сообщение Williams » 23.02.2009 (Пн) 0:08

iGrok писал(а):Просто в домене по Ctrl-Alt-Delete появляется не диспетчер задач, а окно с немного другим функционалом.

Тогда в моем случае (ограниченная оболочка) это вполне приемлемо. Одним из требований является блокировка диспетчера. Я думаю большинству людей этого достаточно. Под Вистой при активации этого значения реестра TaskManager просто убирается из меню

iGrok писал(а):не трогая системные файлы и не прибегая к прочим хакам, на которые матерятся SFC и половина антивирусов никуда не денешь.


А про способ с "Джиной", кстати, наслышан :lol:
И вы думаете, что вас оставят в живых после прочтения этого поста?

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: Блокировка клавиатуры

Сообщение awl100Alex » 23.02.2009 (Пн) 1:49

Lunatic писал(а):Мучаюсь с блокировкой клавиатуры(с возможностью потом обратно её включать)

Использую BlockInput, но он отключаеться ESC или СTRL+ALT+DEL, отключаю ESC используя SetKeyboardState, но остаёться СTRL+ALT+DEL. Пытался отключить его ключём в реестре DisableTaskMgr, да диспетчер действительно перестаёт выскакывать, но всё равно BlockInput становиться "в позу" false. Также в реестре есть интересный ключик NoWinKeys(Но он работает только после перезагрузки).
Думаю может использовать UnregisterHotKey, но как тогда вернуть всё на своё место?


Во вложении проект блокировки клавиатуры только на текстовый ввод...
Попробуй скомбинировать это с тем что ты написал в начале.

Посмотри еще это...
viewtopic.php?f=51&t=27015

P.S.
А вообще, способ напрочь заблокировать только клавиатуру конечно есть - это значит полностью вместе со всеми функциональными клавишами в том числе Диспетчера задач и прочие, но вот только его не очень приветствуют, поэтому писать об этом нет желания.
Вложения
BlockKeyboard.rar
Блокирует клавиатуру на текстовый ввод...
(4.35 Кб) Скачиваний: 164

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Блокировка клавиатуры

Сообщение Lunatic » 23.02.2009 (Пн) 9:06

2 awl100Alex
Пример конечно полезный, но не в этом случае. Исходник библы в студию)

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Блокировка клавиатуры

Сообщение Lunatic » 23.02.2009 (Пн) 9:52

Кстати заметил еще один полезный момент, если зажать паралельно Shift либо второй Ctrl, то CAD не срабатывает. Думаю может на момент блокировки программно "зажимать" одну из этих клавишь. Но как это реализовать? Пробовал так:


Код: Выделить всё
Private Type KeyboardBytes
     kbByte(0 To 255) As Byte
End Type

Private Declare Function SetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Dim kbOld As KeyboardBytes

Private Sub Form_Load()
kbOld.kbByte(16) = 128
kbOld.kbByte(160) = 129
End Sub

Private Sub Timer1_Timer()
SetKeyboardState kbOld
End Sub


Не фурычит. Может что-то со значениями массива туплю :(

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Блокировка клавиатуры

Сообщение ANDLL » 23.02.2009 (Пн) 10:25

Програмно никак не зажать
Есть два общих пути блокировок этих клавиш
1) Написание прослойки-драйвера. В большинстве случаев это криво, и плохо работает с системой в нестандартной конфигурацией, потому что эти прослойки пишут люди не для того что бы работало, а что бы показать что они это могут.
2) Написание своей gina-библиотеки. Это по-моему вполне нормальный способ, но на VB этого делать не стоит(хотя с хакерской addin возможно получится)
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Блокировка клавиатуры

Сообщение Lunatic » 23.02.2009 (Пн) 10:51

"Джина" мне не осилить( Разве что кто-то выложит очень-очень-очень детальное описание)
Ах где мой бубен?!)

А если и вправду поставить хук на отлов CAD, или для этого и требуеться написание библиотеки?

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Блокировка клавиатуры

Сообщение ANDLL » 23.02.2009 (Пн) 11:11

Какой еще хук?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Блокировка клавиатуры

Сообщение Lunatic » 23.02.2009 (Пн) 11:30

Для отлова нажатия трёх заветных клавишь.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Блокировка клавиатуры

Сообщение ANDLL » 23.02.2009 (Пн) 11:32

И как ты его будешь ставить?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Блокировка клавиатуры

Сообщение Lunatic » 23.02.2009 (Пн) 11:47

Это мои глупые предположения. Я не знаю что делать.

Код: Выделить всё
--------------------------------------------------------------------------------

TaskKeyHook.h

////////////////////////////////////////////////////////////////
// MSDN Magazine — September 2002
// If this code works, it was written by Paul DiLascia.
// If not, I don't know who wrote it.
// Compiles with Visual Studio 6.0 and Visual Studio .NET on Windows XP.
//
#define DLLIMPORT __declspec(dllimport)

DLLIMPORT BOOL DisableTaskKeys(BOOL bEnable, BOOL bBeep);
DLLIMPORT BOOL AreTaskKeysDisabled();



TaskKeyHook.cpp

////////////////////////////////////////////////////////////////
// MSDN Magazine — September 2002
// If this code works, it was written by Paul DiLascia.
// If not, I don't know who wrote it.
// Compiles with Visual Studio 6.0 and Visual Studio .NET on Windows XP.
//
// This file implements the low-level keyboard hook that traps the task
// keys.
//
#define _WIN32_WINNT 0x0500 // for KBDLLHOOKSTRUCT
#include <afxwin.h>         // MFC core and standard components

#define DLLEXPORT __declspec(dllexport)

//////////////////
// App (DLL) object
//
class CTaskKeyHookDll : public CWinApp {
public:
   CTaskKeyHookDll()  { }
   ~CTaskKeyHookDll() { }
} MyDll;

////////////////
// The section is SHARED among all instances of this DLL.
// A low-level keyboard hook is always a system-wide hook.
//
#pragma data_seg (".mydata")
HHOOK g_hHookKbdLL = NULL; // hook handle
BOOL  g_bBeep = FALSE;     // beep on illegal key
#pragma data_seg ()
#pragma comment(linker, "/SECTION:.mydata,RWS") // tell linker: make it
                                                // shared

/////////////////
// Low-level keyboard hook:
// Trap task-switching keys by returning without passing along.
//
LRESULT CALLBACK MyTaskKeyHookLL(int nCode, WPARAM wp, LPARAM lp)
{
   KBDLLHOOKSTRUCT *pkh = (KBDLLHOOKSTRUCT *) lp;

   if (nCode==HC_ACTION) {
      BOOL bCtrlKeyDown =
         GetAsyncKeyState(VK_CONTROL)>>((sizeof(SHORT) * 8) - 1);

      if ((pkh->vkCode==VK_ESCAPE && bCtrlKeyDown) || // Ctrl+Esc
          // Alt+TAB
          (pkh->vkCode==VK_TAB && pkh->flags & LLKHF_ALTDOWN) ||   
          // Alt+Esc
          (pkh->vkCode==VK_ESCAPE && pkh->flags & LLKHF_ALTDOWN)||
          (pkh->vkCode==VK_LWIN || pkh->vkCode==VK_RWIN)) { // Start Menu
         if (g_bBeep && (wp==WM_SYSKEYDOWN||wp==WM_KEYDOWN))
            MessageBeep(0); // only beep on downstroke if requested
         return 1; // gobble it: go directly to jail, do not pass go
      }
   }
   return CallNextHookEx(g_hHookKbdLL, nCode, wp, lp);
}

//////////////////
// Are task keys disabled—ie, is hook installed?
// Note: This assumes there's no other hook that does the same thing!
//
DLLEXPORT BOOL AreTaskKeysDisabled()
{
   return g_hHookKbdLL != NULL;
}

//////////////////
// Disable task keys: install low-level kbd hook.
// Return whether currently disabled or not.
//
DLLEXPORT BOOL DisableTaskKeys(BOOL bDisable, BOOL bBeep)
{
   if (bDisable) {
      if (!g_hHookKbdLL) {
         g_hHookKbdLL = SetWindowsHookEx(WH_KEYBOARD_LL,
            MyTaskKeyHookLL, MyDll.m_hInstance, 0);
      }

   } else if (g_hHookKbdLL != NULL) {
      UnhookWindowsHookEx(g_hHookKbdLL);
      g_hHookKbdLL = NULL;
   }
   g_bBeep = bBeep;

   return AreTaskKeysDisabled();
}



ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Блокировка клавиатуры

Сообщение ANDLL » 23.02.2009 (Пн) 12:07

Это не будет никак влиять на ctrl+alt+del
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Блокировка клавиатуры

Сообщение Williams » 23.02.2009 (Пн) 12:13

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

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Блокировка клавиатуры

Сообщение Lunatic » 23.02.2009 (Пн) 14:00

Ладно тогда остаёться msgina. Я так понял нас интересует функция WlxLoggedOnSAS (когда чел залогинен и форточки не заблокированы)
Кто знает параметры для "общения" с энтой функцией? (Коль кашу заварили в ВБ, будем пользоваться FireNativeDll)
Итак с чего начнёмс?

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Блокировка клавиатуры

Сообщение Lunatic » 23.02.2009 (Пн) 14:30

Если кто-то поможет с китайским)
http://topic.csdn.net/t/20020307/09/559915.html

С декларацией разобрался, даже чё-то там работает, только не понял что
Код: Выделить всё
Private Declare Function WlxLoggedOnSAS Lib "msgina.dll" (pWlxContext As Any, ByVal dwSasType As Long, pReserved As Any) As Long

Public Function DisableClient() As Boolean
        Dim hMutex
        Dim x As String
        x = "_ac952_z_cn_CTRL_ALT_DEL"
        hMutex = WlxLoggedOnSAS(0&, False, StrPtr(x))
        DisableClient = True
        MsgBox "hMutex:   " & hMutex
End Function


Если я правильно понял инструкции MSDN, то должно быть что-то такое
Код: Выделить всё
Const WLX_SAS_TYPE_CTRL_ALT_DEL As Long = 1
hMutex = WlxLoggedOnSAS(0&,WLX_SAS_TYPE_CTRL_ALT_DEL, Null)

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Блокировка клавиатуры

Сообщение ANDLL » 23.02.2009 (Пн) 14:48

Судя по всему ты совсем ничего не понял. Это callback-функция, ты ее не вызываешь, ты ее предоставляешь
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Блокировка клавиатуры

Сообщение Lunatic » 23.02.2009 (Пн) 15:13

Угадал! Я ничего не понял. Поэтому и прошу чтобы помогли

Ну коль хук на Сtrl+Alt+Del нельзя поставить, может быть его можно поставить на одну из клавишь, или на Ctrl+Alt, тогда ведь комбинация не пройдёт. Или пройдёт?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Блокировка клавиатуры

Сообщение iGrok » 23.02.2009 (Пн) 15:37

Lunatic писал(а):Угадал! Я ничего не понял. Поэтому и прошу чтобы помогли

Ну коль хук на Сtrl+Alt+Del нельзя поставить, может быть его можно поставить на одну из клавишь, или на Ctrl+Alt, тогда ведь комбинация не пройдёт. Или пройдёт?

Пройдёт.
label:
cli
jmp label

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Блокировка клавиатуры

Сообщение Lunatic » 23.02.2009 (Пн) 23:05

Нашел пример на Сях(dll инжектится к winlogon). Работает, CAD действительно отключаеться, вот только при нажатии BlockInput снимается всё равно. Пока розбирался с примером(который оказался весьма полезным, но в другой сфере. *мне сейчас не до троянов, но на полочку его отложу*=)), пришёл к другой мысли, хоть и не столь красиво, но главное работает. Блокировка крутится по Do While до тех пор пока на вход не поступит буль. И то что включается taskmgr, это уже не имеет ни какой разницы, так как воспользоваться им не предоставляеться возможным при статичном курсоре мышки и мёртвой клавы)

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Блокировка клавиатуры

Сообщение Williams » 23.02.2009 (Пн) 23:31

Lunatic писал(а):Пока розбирался с примером(который оказался весьма полезным, но в другой сфере. *мне сейчас не до троянов, но на полочку его отложу*=)),

Троян который блокирует клавиши, это тупой троян, по-скольку хороший ТРОЯН не должен никак выдавать своего присуствия 8)
И вы думаете, что вас оставят в живых после прочтения этого поста?

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: Блокировка клавиатуры

Сообщение awl100Alex » 24.02.2009 (Вт) 0:15

Lunatic
А что это... у тебя не работает???
Вложения
Block-Ctrl-Alt-Del.rar
Установить/снять блокировку Ctrl-Alt-Del...
(3.71 Кб) Скачиваний: 107

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Блокировка клавиатуры

Сообщение Lunatic » 24.02.2009 (Вт) 0:53

Williams писал(а):
Lunatic писал(а):Пока розбирался с примером(который оказался весьма полезным, но в другой сфере. *мне сейчас не до троянов, но на полочку его отложу*=)),

Троян который блокирует клавиши, это тупой троян, по-скольку хороший ТРОЯН не должен никак выдавать своего присуствия 8)


Да блокировки тут не при чём. Просто есть модуль скрытия процесса в диспетчере задач + функции кейлогера, так вот если последний убрать то VirusTotal не сечёт вообще))

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Блокировка клавиатуры

Сообщение Lunatic » 24.02.2009 (Вт) 1:00

awl100Alex писал(а):Lunatic
А что это... у тебя не работает???


Да зарезать диспетчер задач не проблема. Проблема в другом
Я присвоил BlockInput=False, но If нажали(Ctrl + Arl + Del) Then самопроизвольно BlockInput=True, что мне очень не желательно))

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: Блокировка клавиатуры

Сообщение awl100Alex » 24.02.2009 (Вт) 11:55

Lunatic
Что-то я никак не пойму... что тебе конкретно нужно и для чего все это.
Тебе нужно отключить клавиатуру, но оставить активной мышку? Или все подряд (и мышку...) отключить полностью?

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Блокировка клавиатуры

Сообщение Lunatic » 24.02.2009 (Вт) 18:15

Читай первое сообщение. (Блокировать всё. Хотя можно только клаву)

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: Блокировка клавиатуры

Сообщение awl100Alex » 25.02.2009 (Ср) 0:56

Lunatic
Все равно непонятно... В самом начале ты стал использовать функцию BlockInput, которая известно что блокирует и мышку и клаву (BlockInput True), но возврат обратно - BlockInput False только в самой проге нужно ставить таймер или Sleep. Так же известно, что BlockInput снимается по Ctrl+Alt+Del - зачем она тогда нафиг нужна вообще непонятно! О чем думали программисты изобретая такую грозную(!) фукцию???!!!
Следовательно, если я правильно тебя понимаю: тебе нужно заблокировать консоль (клавиатура, мышь) подобно функции BlockInput на некоторое время Sleep... но без снятия этой блокировки по Ctrl+Alt+Del???
И на какой клаве предпологается прогу использовать: AT, PS/2, USB???

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 63

    TopList