Nov 29, 2010

Disable ALT+TAB, ALT+ESC, CTRL+ESC, etc on Windows( XP, 2000, Seven) Dengan Delphi [Part III]

Tutorial ini merupakan lanjutan dari sebelumnya (Part II) yang hanya berfungsi untuk mematikan / Disable Task Manager ( Disable CTRL+ALT+DEL ).

Setelah beberapa kali googling, akhirnya menemukan tutorial sangat menarik, sesuai keinginan, yang didapat dari Forum delphiarea.

Sudah berupa kode komplit, berupa unit DisableWinKeys.pas, dibuat oleh Andrea Belli, hasil migrasi prject DLL buatan Gambiz@delphiarea.com

Setelah dipelajari, Unit tersebut berfungsi untuk mematikan tombol:
- CTRL+ESC
- ALT+TAB
- ALT+ESC

Dan penulis modifikasi unit tersebut untuk menambahkan beberapa variasi kombinasi tombol yaitu:
- CTRL+ENTER
- WINKEY (Left/Right),
- MENUKEY (Left/Right

Berikut Kode lengkapnya:
(************************************************************
this unit migrated from dll project(by Kambiz@delphiarea.com)
downloaded at:
http://forum.delphiarea.com/viewtopic.php?f=5&t=1744#p6504
Originally created by:
Andrea Belli@delphiarea.com
March 5th, 2010, 12:51 am
enhanced: CTRL+ESC,ALT+TAB,ALT+ESC
modified by;
rehmoe@yahoo.com
11:23 29/11/2010 more key added,
enhanced: CTRL+ESC,
ALT+TAB,
ALT+ESC,
CTRL+ENTER,
WINKEY (Left / Right),
MENKEY(Left/Right)
**************************************************************)
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;


Kode ini berfungsi dengan baik di Windows XP & Seven(tested),
semoga saja kompatible dengan versi-versi Windows lainnya

9 comments:

Anonymous said...

tombol esc pada keyboard saya tidak berfungsi ketika menggunakan software autocad....
mohon penjelasannya.
terima kasih sebelumnya.

Unknown said...

pertama,
posting ini sebenernya ditujukan utk tutorial programming
untuk manipulasi variasi keyboard, utk tujuan secure, yg seringnya dipakai di aplikasi2 client billing warnet.

kedua,
mengenai kendala mas wahidin,
terus terang saya agak bingung menjawabnya, karena saya bukan pengguna autocad.

btw coba beberapa hal sedikit ini:
1.
pastikan tombol ESC berfungsi dg baik saat autocad tidak dijalankan.( Ya/Tidak)

2.
kalo dari no 1. Ya
nah kalo saat dijalankan, ESC menjadi disabled,
ada kemungkinan2 lagi, apakah itu karena setting aplikasi autocadnya ato terkena virus? kalo virus rada aneh juga, karena saya pribadi belum mengalami virus aktif karena aplikasi tertentu(autocad), kalo autocad ditutup, virus nonaktif..... jadi kemungkinan ada setting/konfigurasi tertentu di aplikasi autocad

kalo dari no 2. Tidak
berarti kemungkinan tombol ESC ada masalah secara hardware(keyboard error)


maaf saya bukan pengguna aplikasi autocad, jadi jawabannya masih kira-kira

danang.yunianto said...

mas rahmoe saya bingung penempatan codingnya, type saya masukkan di bagian type jd error, lalu knp type dr coding di atas ada "end;" ? dan DisableKeyWins sudah saya tambahkan di dalam uses tp error, mohon penjelasan dari coding di atas besrta penempatannya atau mungkin ada penambahan component, terimakasih sebelumnya

Unknown said...

@danang.yunianto,
1. Bagian "semua Kode lengkap" diatas, copy & paste di notepad
2. trus save as --> DisableWinKeys.pas (pastikan type "All Files")

utk menggunakannya
1. file DisableWinKeys.pas tsb kopikan direktori source project masbro
2. dan pada code masbro tambahkan :
uses DisableWinKeys;

3. utk disable panggil prosedur:
DisableWindowsUI;

4. utk enable panggil prosedur:
EnableWindowsUI

SiMems said...

mas untuk mengimplementasikan ke sistem windowsnya gmn caranya??

Unknown said...

@SiMems,
Implementasinya tinggal bikin programnya aja. Nah karena code diatas untuk delphi, jadi akan lebih mudah kalo pake delphi.

Unknown said...

gan, kalo tombol [Ctrl]+[Alt]+[Del] scriptnya seperti apa ?
sy sdh coba dgn modifikasi sprti ini :

if (pkbhs^.vkCode = VK_DELETE) and LongBool(pkbhs^.flags and LLKHF_ALTDOWN) and WordBool(GetAsyncKeyState(VK_CONTROL) and $8000) then begin
Result := 1;
Exit;
end;

tp tombol [Ctrl]+[Alt]+[Del] msh berfungsi
kalo yang lainnya sdh work..
sy jg sdh coba modif [Alt]+[F4] jg brhasil
mkasih atas ilmunya gan

Unknown said...

@asrarul ikram,

sudah dicoba code yg di sini ?
http://rehmoe.blogspot.com/2010/11/disable-ctrl-alt-del-dengan-delphi.html

Unknown said...

gan, kalo tombol [Ctrl]+[N] dll & yang terdiri dari tiga tombol scriptnya seperti apa ?
mohon pencerahannya terima kasih

Post a Comment