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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Способ отключить клавиши Win+...,Alt-Tab, и т. д., в том числе и в Win 2000/XP 
:(
    Опции темы
ДЫМ
  Дата 4.2.2005, 04:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Нашел в сети любопытный пример, smile где с помощью низкоуровневого хука на клавиатуру отключаются клавиши Alt-Tab, сочетания Win+... (даже Win+L). Тут многие интересовались, как это сделать, поэтому я решил создать топик.

Вот код (здесь я переделал под глобальный хук).
Код

library DisableHotKeys;

uses
 SysUtils, Windows, Messages;

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

const
 HookHandle: hHook = 0;
 LLKHF_ALTDOWN  = KF_ALTDOWN shr 8;
 WH_KEYBOARD_LL = 13;

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) );

// для Cotrl+Alt+Delete, к сожалению, не работает.
//             ( (p^.vkCode = VK_DELETE) and ( (p^.flags and LLKHF_ALTDOWN) <> 0 ) and
//              ( (GetKeyState(VK_CONTROL) and $8000) <> 0));
       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
 HookHandle:=SetWindowsHookEx(WH_KEYBOARD_LL, @KeyboardProc, HInstance, 0)
else
 begin
  UnhookWindowsHookEx(HookHandle);
  HookHandle:=0;
 end;
end;
exports Hook;

begin
end.



А это пример использования

Код

implementation
...

//Загрузка DLL
procedure Hook(lRun:Boolean) stdcall; external 'DisableHotKeys' name 'Hook';


procedure TForm1.FormCreate(Sender: TObject);
begin
Hook(True);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Hook(False);
end;
...


А вопрос такой - можно ли, используя данный механизм, заблокировать Ctrl+Alt+Delete?

Это сообщение отредактировал(а) ДЫМ - 4.2.2005, 04:47
PM MAIL WWW   Вверх
Akella
Дата 4.2.2005, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



PM MAIL   Вверх
ДЫМ
Дата 5.2.2005, 02:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Дык, эти проблемы мы уже преодолели.
PM MAIL WWW   Вверх
XAKEPEHOK
Дата 21.7.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Жалуется на 
Код

 HookHandle:=SetWindowsHookEx(WH_KEYBOARD_LL, @KeyboardProc, HInstance, 0)


[Error] Project1.dpr(60): Left side cannot be assigned to
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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