Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/86: Рейтинг темы: голосов - 86, средняя оценка - 4.84
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096

Как запретить нажатие клавиш?

19.08.2010, 19:08. Показов 16151. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как мне в моем проекте запретить нажатие следующих клавиш
Alt + tab
alt + Ctrl + del
Alt + F4
Ctrl + Shift + Esc
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.08.2010, 19:08
Ответы с готовыми решениями:

Как перехватить нажатие комбинации клавиш?
снова я) помогите а то гугле немогу найти... как сделать штобы когда запущена програма неработали клавиши Alt+F4 Ctr+Alt+Del

Как отследить движение мыши и нажатие клавиш?
Надо определить, сколько времени бездействует ПК. Как отследить движение мыши и нажатие клавиш?

Как перехватить нажатие клавиш со стрелками на форме?
Приветствую всех. Вот поиском нашел такое: Однако, по нажатию клавиш "стрелки" событие не активируется, а начинает гонять...

12
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
20.08.2010, 11:56
В обpаботчике FormKeyDown пишешь:
C++
1
if (Shift.Contains(ssAlt)&&Key==VK_F4) Tag=1;
и так далее
1
10 / 10 / 4
Регистрация: 14.08.2010
Сообщений: 103
20.08.2010, 20:38
Цитата Сообщение от iama Посмотреть сообщение
В обpаботчике FormKeyDown пишешь:
C++
1
if (Shift.Contains(ssAlt)&&Key==VK_F4) Tag=1;
и так далее
А этот "Tag" только для чисел(для int) создан? MikeSoft подсказал про него недавно - удобная вещь.
0
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
20.08.2010, 21:49  [ТС]
Только если на форму положить TButton или еще кого-нибудь, то код не работает!
0
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
20.08.2010, 21:51
doocee, значит тот же обработчик на событие OnKeyDown каждого компонента
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
20.08.2010, 21:52
Цитата Сообщение от AleksBak Посмотреть сообщение
А этот "Tag" только для чисел(для int) создан?
Да, поле Tag имеет тип int, соответственно, остальные типы без преобразований с потерей туда поместить невозможно.

Цитата Сообщение от doocee Посмотреть сообщение
Как мне в моем проекте запретить нажатие следующих клавиш
Alt + tab
alt + Ctrl + del
Alt + F4
Ctrl + Shift + Esc
Чтобы запретить закрытие по Alt + F4 лучше обработать событие OnCloseQuery, т.к. закрыть форму можно из трея, не прибегая к нажатию Alt+F4:
C++
1
2
3
4
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
  CanClose = false;
}
А вот остальные клавиши являются более приоритетными и используются непосредственно ОС. Поэтому, для их перехвата, возможно, нужно устанавливать соответствующий хук.
Зачем вам всё это?

Цитата Сообщение от iama Посмотреть сообщение
В обpаботчике FormKeyDown ...
Насколько я знаю, данный метод не поможет.
Во-первых, вы забыли указать обнуление полученного значения Key:
C++
1
2
3
4
if (Shift.Contains(ssAlt)&&Key==VK_F4) {
  Key = 0; // не следует забыть, что мы пользуемся ссылкой на реальный объект ([B]WORD &Key[/B]), а не обычной переменной!
  // остальные действия, если необходимы
}
Т.к. функция OnKeyPress даёт вам возможность воспользоваться ссылкой на нажатую клавишу, необходимо заставлять приложение "забыть" нажатую клавишу. Также, не следует забывать, что используя такой метод мы постоянно должны быть привязаны к фокусу формы (один из вариантов - вызывать данную функцию для всех компонентов, родителями которых является форма).
Во-вторых, остальные сочетания клавиш вообще не возбудят обработчик.
2
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
20.08.2010, 22:57
Эти две комбинации запретить нельзя
Code
1
2
alt + Ctrl + del
Ctrl + Shift + Esc
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
20.08.2010, 23:23
M128K145, можно... данные комбинации регистрируются при входе в ОС процессом winlogon.

Поэтому, необходимо выполнять внедрение DLL в процесс и перехватывать WM_HOTKEY.
Для внедрения в процесс пригодится программа Injector (фриварная, опенсорсовая, поэтому прикрепляю к сообщению).
Вложения
Тип файла: rar Injector.rar (12.9 Кб, 119 просмотров)
0
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
21.08.2010, 00:55  [ТС]
Цитата Сообщение от MikeSoft Посмотреть сообщение
M128K145, можно... данные комбинации регистрируются при входе в ОС процессом winlogon.
Поэтому, необходимо выполнять внедрение DLL в процесс и перехватывать WM_HOTKEY.
Для внедрения в процесс пригодится программа Injector (фриварная, опенсорсовая, поэтому прикрепляю к сообщению).
А лучше программно переименовать taskmgr.exe в папке System32 что-бы нажатие клавиш запрашивали этот файл а его нет, и нет результата.
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
21.08.2010, 10:12
doocee, и тогда это будет смахивать уже не на шутку, а на злобный гадкий вирус, портящий все вокруг.
0
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
21.08.2010, 12:36  [ТС]
Цитата Сообщение от Папа Карло Посмотреть сообщение
doocee, и тогда это будет смахивать уже не на шутку, а на злобный гадкий вирус, портящий все вокруг.
Не! Потом когда все закончится вернуть все на место. Если конечно прогу закроют нормальными способами, а не убиванием процессов, какой-нибудь защитной проги.
0
Волшебник
 Аватар для Rapsod
65 / 64 / 7
Регистрация: 21.11.2009
Сообщений: 319
21.08.2010, 22:41
Лучший ответ Сообщение было отмечено как решение

Решение

Эх вы хакеры))))
Этот код вам точно пригодиться!

Запрет комбинаций клавиш:
(LWin\RWin\Alt+Tab\Alt+Esc\Ctrl+Esc\Ctrl +Shift+Esc)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
__fastcall TForm14::TForm14(TComponent* Owner)
    : TForm(Owner)
{
 
}
 
//---------------------------------------------------------------------------
int __stdcall KeyboardProc(int nCode, DWORD wParam, DWORD lParam) // Блокировка системных клавиш
{
    HHOOK hHook;
    static bool KeyStroke;
    static KBDLLHOOKSTRUCT *p;
 
    if (nCode < 0) return (int)CallNextHookEx(NULL, nCode, wParam, lParam);
 
    KeyStroke = FALSE;
    if (nCode == HC_ACTION)
    {
        switch(wParam)
        {
        case WM_KEYDOWN:
        case WM_SYSKEYDOWN:
        case WM_KEYUP:
        case WM_SYSKEYUP:
            p = (KBDLLHOOKSTRUCT *)lParam;
            KeyStroke = ((p->vkCode == VK_LWIN) || (p->vkCode == VK_RWIN)) ||
                        ((p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN)!=0)) ||
                                                ((p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN)!=0)) ||
                        ((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000)!=0)) ||
                        ((p->vkCode ==VK_F4) && ((p->flags & LLKHF_ALTDOWN)!=0)) ||
                        ((p->vkCode ==0xC0) && ((MOD_CONTROL +  0x10)!=0));
 
            break;
        default:
            break;
        }
    }
  if (KeyStroke)
    return 777;
  else
    return (int)CallNextHookEx(hHook, nCode, wParam, lParam);
 
}
 
//---------------------------------------------------------------------------
 
void __fastcall TForm14::FormCreate(TObject *Sender)
{
// При загрузке программы - активация хука
 
try
    {
        //hHook =
        SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)&KeyboardProc, GetModuleHandle(NULL), 0);
    }
    catch(...)
    {
        ;
    }
//------------------------------------------------------- При закрытии проги хук удаляеться..
Добавлено через 2 минуты
+ Блокировать запуск диспетчера задач Ctrl+Alt+Del

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "registry.hpp"
//---------------------------
 
TRegistry   *reg;
  reg = new TRegistry();
  reg->RootKey = HKEY_CURRENT_USER;
  reg->OpenKey("Software", true);
  reg->OpenKey("Microsoft", true);
  reg->OpenKey("Windows", true);
  reg->OpenKey("CurrentVersion", true);
  reg->OpenKey("Policies", true);
  reg->OpenKey("System", true);
  reg->WriteString("DisableTaskMgr", "1");
  //1 - блок, 0 или отсутствие ключа - отключение блокировки (null)
  reg->CloseKey();
13
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
21.08.2010, 22:47  [ТС]
Rapsod, Круто!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.08.2010, 22:47
Помогаю со студенческими работами здесь

Нажатие клавиш
Вобщем, нужна Ваша помощь товарищи гуру. Юзер моей программы должен выбирать окно любой другой программы, в котором спустя некоторые...

Нажатие и удерживание клавиш
Незнаю как назвать даже тему. Но принцип программы такой. При нажимании на клавишу F11,нажимаются клавиша &quot;W&quot; и держится,до...

Реакция на нажатие клавиш
Хочу что бы при одновременном нажатии некоторой комбинации клавиш выполнялось какое то действиеvoid __fastcall TForm1::FormKeyDown(TObject...

Нужно обработать нажатие клавиш
У меня есть много элементов на форме которые забирают на себя фокус поэтому обычные (KeyDown, KeyPress, KeyUp) события обработки кливиш не...

Button и нажатие их с помощью клавиш
здраствуйте, у меня на форме есть две кнопки (button1 и button2) нужно чтоб при нажатии на клавишу enter нажималась button1 а при нажатии...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru