Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Блокировка клавиш


Switer ©   (2005-05-06 22:30:00) 

Данный код блокирует на клавиатуре калвиши  (левый и правый)Ctr+Esc, (левый и правый)Alt+Tab, а также Alt+пробел, и левую кнопку Win.
Мастера Delphi, как модернзировать данный код, чтобы помимо блокировки левой клавиши Win на клавиатуре, блокировалась еще  и правая клавиша Win ????
 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;

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 = 91) ) 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 = 46) and ( (p^.flags and LLKHF_ALTDOWN) <> 0 ) and
             ( (GetKeyState(VK_CONTROL) and $8000) <> 0));
       end;
     end;
 end;

 if KeyStroke then
   result := 1
 else
   result := CallNextHookEx(0, nCode, wParam, lParam);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 HKBD: HHook;
begin
BlockForm.Cursor:=crnone;
BlockPanel.Cursor:=crnone;
BlockMask.Cursor:=crnone;

HKBD := SetWindowsHookEx(WH_KEYBOARD_LL, @KeyboardProc, HInstance, 0);
end;


alpet   (2005-05-07 17:20:00) [1]

VK_APPS = 93;
Applications key (Natural keyboard)


Switer   (2005-05-07 16:48:00) [2]

Или она не блокируется?


Switer   (2005-05-07 15:36:00) [3]

Большое спасибо за помощь. Только вот еще одна проблемка: На клавиатуре также имеется кнопка Конекстного меню -  можно ли и её тоже каким либо образом заблокировать?


alpet   (2005-05-07 13:39:00) [4]

Windows.pas:
{$EXTERNALSYM VK_LWIN}
VK_LWIN = 91;
{$EXTERNALSYM VK_RWIN}
VK_RWIN = 92;


Deka   (2005-05-07 11:22:00) [5]

Замени в своем коде

( (p^.vkCode = 91) ) or

на

( (p^.vkCode = 91) ) or ( (p^.vkCode = 92) ) or


boalse   (2005-05-07 10:48:00) [6]

KeyStroke :=(p^.vkCode =92)or...


Switer   (2005-05-07 10:01:00) [7]

Может приведете пример?


Switer   (2005-05-07 10:00:00) [8]

А по подробней?


Antonn   (2005-05-07 09:06:00) [9]

код второго Вина 92


Switer   (2005-05-07 08:46:00) [10]

Может кто нибудь знает другой вариант кода блокировки клавиш???


Наверх

Титульная страница Поиск, карта сайта Написать письмо