Windows NT,XP ve üzeri OS'larda görev tuşlarını kapatmak

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Windows NT,XP ve üzeri OS'larda görev tuşlarını kapatmak

Mesaj gönderen fduman »

Windows NT, XP, 2003 vs. işletim sistemlerinde Alt-Tab, Alt-Esc, Ctrl-Esc ve Windows tuşlarını etkisiz hale getirmek için, bu MSDN adresindeki koddan faydalanarak, Delphi ile bir DLL oluşturacağız. DLL Windows'un tuş alt sistemine bir çengel atıyor. Daha sonra istemediğimiz tuşları algılayarak bunları geriye 1 döndürerek etkisiz hale getiriyor.

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.
DLL'i uygulamamızda kullanmak için uygulama ile aynı klasöre veya path içinde tanımlı bir klasöre kopyalıyoruz.

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.
Yazarak uygulamamızı başlattığımızda çalışmasını ve kapandığında eski hale gelmesini sağlıyoruz.

Not: Bu kodu doğrudan Delphi uygulamanız içine gömerek de çalıştırabilirsiniz. Bu halde sadece MyTaskKeyHookLL stdcall olmak zorundadır.
ramazan3301
Üye
Mesajlar: 1
Kayıt: 02 Ara 2010 04:52

Re: Windows NT,XP ve üzeri OS'larda görev tuşlarını kapatmak

Mesaj gönderen ramazan3301 »

İlk Önce Ellerinize Vede Emeginize Sağlık Çok Çok Teşekkür Ederim
Bir Ricam Olacaktı Bu Dll Dosyası İçerisine Ctrl+Alt+Del Fonksiyonunu Naıl Entegre Ederiz Yani Onu Da Eklemek İstersek Nasıl Yaparız Bu Konuda Pek Bi Bilgim Yok Yardım Ederseniz Çok Sevinirim Dostlarım Şimdiden Teşekkür Ederim...Tekrar Emeğinize Sağlık...
Cevapla