Monday, January 10, 2011

Disable ALT+TAB, ALT+ESC, CTRL+ESC, etc on Windows( XP, 2000, Seven)

unit DisableWinKeys;

interface

uses Windows;

type
  PKBDLLHOOKSTRUCT = ^TKBDLLHOOKSTRUCT;
  TKBDLLHOOKSTRUCT = packed record
    vkCode: DWORD;
    scanCode: DWORD;
    flags: DWORD;
    time: DWORD;
    dwExtraInfo: DWORD;
  end;

  function DisableWindowsUI: Boolean;
  function EnableWindowsUI: Boolean;
  function IsWindowsUIDisabled: Boolean;

const
  WH_KEYBOARD_LL = 13;

const
  LLKHF_ALTDOWN = $0020;

var
  hKeyboardHook: HHOOK = 0;

implementation

function LowLevelKeyboardHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): HRESULT; stdcall;
var
  pkbhs: PKBDLLHOOKSTRUCT;
begin
  pkbhs := PKBDLLHOOKSTRUCT(lParam);
  if nCode = HC_ACTION then
  begin
    // Disable CTRL+ESC
    if (pkbhs^.vkCode = VK_ESCAPE) and WordBool(GetAsyncKeyState(VK_CONTROL) and $8000) then
    begin
      Result := 1;
      Exit;
    end;
    // Disable ALT+TAB
    if (pkbhs^.vkCode = VK_TAB) and LongBool(pkbhs^.flags and LLKHF_ALTDOWN) then
    begin
      Result := 1;
      Exit;
    end;
    // Disable ALT+ESC
    if (pkbhs^.vkCode = VK_ESCAPE) and LongBool(pkbhs^.flags and LLKHF_ALTDOWN) then
    begin
      Result := 1;
      Exit;
    end;
    //=============START:modified=====================================================
    // Disable CTRL+ENTER
    if (pkbhs^.vkCode = VK_RETURN) and LongBool(pkbhs^.flags and LLKHF_ALTDOWN) then
    begin
      Result := 1;
      Exit;
    end;
    // Disable winkey(Left / Right)
    if (pkbhs^.vkCode = VK_LWIN) or (pkbhs^.vkCode = VK_RWIN) then
    begin
      Result := 1;
      Exit;
    end;
    // Disable menukey(Left/Right)
    if (pkbhs^.vkCode = VK_MENU) or (pkbhs^.vkCode = VK_LMENU) or (pkbhs^.vkCode = VK_RMENU) then
    begin
      Result := 1;
      Exit;
    end;
    //==================END:Modified================================================================
  end;
  Result := CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
end;

function DisableWindowsUI: Boolean;
begin
  if hKeyboardHook = 0 then
    hKeyboardHook := SetWindowsHookEx(WH_KEYBOARD_LL, @LowLevelKeyboardHook, HInstance, 0);
  Result := (hKeyboardHook <> 0)
end;

function EnableWindowsUI: Boolean;
begin
  Result := False;
  if (hKeyboardHook <> 0) and UnhookWindowsHookEx(hKeyboardHook) then
  begin
    hKeyboardHook := 0;
    Result := True;
  end;
end;

function IsWindowsUIDisabled: Boolean;
begin
  Result := (hKeyboardHook <> 0)
end;

end.
 
 
 
Cara pemanggilannya:
(Pastikan DisableWinKeys sudah ditambahkan pada bagian uses)
//disable
procedure TForm1.btn1Click(Sender: TObject);
begin
  DisableWindowsUI
end;

//enable
procedure TForm1.btn2Click(Sender: TObject);
begin
  EnableWindowsUI
end;

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Kang Iwan K-sev | Thank's for your visit To My Site - Ridwan Mulyana | Cibeureum