Kod: Tümünü seç
library SysKeyHook;
uses Windows;
type
PKBDLLHOOKSTRUC = ^KBDLLHOOKSTRUCT;
KBDLLHOOKSTRUCT = packed record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: Pointer;
end;
const
LLKHF_ALTDOWN = $20;
WH_KEYBOARD_LL = 13;
var
KBHook: HHook = 0;
function MyTaskKeyHookLL(nCode: Integer;
wp: WPARAM; lp:LPARAM): LRESULT; stdcall;
var
pkh: KBDLLHOOKSTRUCT;
CtrlKeyDown: Boolean;
begin
pkh:= PKBDLLHOOKSTRUC(lp)^;
if nCode = HC_ACTION then
begin
CtrlKeyDown:= GetAsyncKeyState(VK_CONTROL) <> 0;
if ((pkh.vkCode = VK_ESCAPE) and CtrlKeyDown) or // Ctrl+Escape
((pkh.vkCode = VK_TAB) and (pkh.flags and LLKHF_ALTDOWN <> 0)) or // Alt+Tab
((pkh.vkCode = VK_ESCAPE) and (pkh.flags and LLKHF_ALTDOWN <> 0)) or // Alt+Esc
((pkh.vkCode = VK_LWIN) or (pkh.vkCode = VK_RWIN)) then // Start Menu
begin
Result:= 1; // gobble it: go directly to jail, do not pass go
Exit;
end;
end;
Result:= CallNextHookEx(KBHook, nCode, wp, lp);
end;
function DisableSysKeys(ADisable: Boolean): Boolean; stdcall;
begin
if ADisable then
begin
if KBHook = 0 then
KBHook:= SetWindowsHookEx(WH_KEYBOARD_LL,
@MyTaskKeyHookLL, HInstance, 0);
end else
if KBHook <> 0 then
begin
UnhookWindowsHookEx(KBHook);
KBHook:= 0;
end;
Result:= KBHook <> 0;
end;
function AreSysKeysDisabled: Boolean; stdcall;
begin
Result:= KBHook <> 0;
end;
exports
DisableSysKeys, AreSysKeysDisabled;
end.
Daha sonra programımızda kullanılan herhangi bir unit'e:
Kod: Tümünü seç
function DisableSysKeys(ADisable: Boolean): Boolean; stdcall; external 'SysKeyHook.dll';
function AreSysKeysDisabled: Boolean; stdcall; external 'SysKeyHook.dll';
initialization
DisableSysKeys(True);
finalization
DisableSysKeys(False);
end.
Not: Bu kodu doğrudan Delphi uygulamanız içine gömerek de çalıştırabilirsiniz. Bu halde sadece MyTaskKeyHookLL stdcall olmak zorundadır.