Ctrl+Esc

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
xor
Üye
Mesajlar: 58
Kayıt: 02 Tem 2005 11:49

Ctrl+Esc

Mesaj gönderen xor »

Arkadaşlar baya bi araştırma yaptıktan sonra Ctrl+Esc de dahil Başlat butonunu kilitleyen bişi buldum.Mevcut olanlar XP'de olmuyodu.
viewtopic.php?t=6035&highlight=ctrl+esc

Yalnız ben bunu kendi programıma nasıl uyguluycam onu bilmiyorum???
Bu dll'yi direk programda kullansam bi mahsuru olur mu?
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Merhabalar,

İnanmayacaksınız belki ama daha 2 saat önce yazıp bitirdiğim ve kendi programlarım için kullanacağım bir koddan bahsediyorsunuz.

Şimdi tüm istediğiniz bu iş için sistem genelini kapsayan bir HOOK (kançalama) yapmanız gerekiyor. Vereceğim bu örnek sadece 2000/XP ve üstü sistemlerde çalışmaktadır. WH_KEYBOARD_LL olarak deklare edilen ancak Delphide karşılığı olmayan bir HOOK ile yapılıyor bu.

bunu şu şekilde tanımlaya bilirsiniz. Yada WH_KEYBOARD_LL için sadece 13 değerini de kullanabilirsiniz.

Kod: Tümünü seç

Const
   WH_KEYBOARD_LL = 13;
Bu kod çok sade bir kullanımdır, bu kodun başka varyasyonlarınıda yazmıştım, şöyleki, basılan tuşları benim ana formuma gönderiyor flaan tuş basılınca birişlem yaptırtıyordum. Aslında kötü niyetli kişiler için tehlikeli bir kod olacağını düşünüyorum. Bu sizlerin karakteristik özelliğinize bağlı olacağı için günahı sevabı size aittir. Ancak yine kötü niyetli kullanım olmaması amacıyla sadece ALT-ESC, ALT-TAB, ALT-F4, Sol ve Sağ WinKEY tuşlarını engelelyen bu örneği gönderiyorum.

ilk önce DLL'in tüm kodlarını veriyorum.

Kod: Tümünü seç

{ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(c) 2006, Musonya Software and Internet Technologies
web    : http://www.musonya.com
e-mail : mdicle@gmail.com

Main project name : JustFilter ADVANCED
Unit name         : xxxx.dpr
Output name       : xxxx.dll
Create date       : 29.04.2006 01:00
Created by        : M. Murat DiCLE
First description : ALT-F4, ALT-TAB, ALT-ESC, Sol ve Sağ WinKey
                    tuşlarını yasaklar.
Release version   : 1.0

Method            : Ana programdan SetHook yada FreeHook olarak çağrılır.
Todo              :

What's new        :
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Last updated by     : M. Murat Dicle
Last updated date   : 29.04.2006 02:29
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ }

library WinKeyHook;

uses Windows;

//eğer DLL için version bilgileri girmek istiyorsanız bu satır olmalıdır. 
//aksi durumda çıkan DLL için version information eklenmeyecektir.
//ki buda 2KB daha az çıktı oluşturacaktır.
{$R *.res}

type
   KBDLLHOOKSTRUCT = record
                        vkCode: DWORD;
                        scanCode: DWORD;
                        flags: DWORD;
                        time: DWORD;
                        dwExtraInfo: ULONG;
                     end;

var
  NextHookHandle : HHOOK;

function MsgFilterFunc(Code: Integer; w : wparam; l: lparam): integer; stdcall;
begin
   if (Code < 0) or (w = PM_NOREMOVE) then
      Result := CallNextHookEx(NextHookHandle, Code, w, l)
   else
      begin
         with KBDLLHOOKSTRUCT(pointer(l)^) do
            if (vkCode = VK_ESCAPE) OR (vkCode = VK_TAB) OR
               (vkCode = VK_F4) OR
               (vkCode = VK_LWIN) OR (vkCode = VK_RWIN) Then
               Result := 1
            else
               Result := CallNextHookEx(NextHookHandle, Code, w, l);
      end;
end;

function SetHook: Boolean; stdcall;
begin
   NextHookHandle := SetWindowsHookEx(13, @MsgFilterFunc, HInstance, 0);
   Result := True;
end;

function FreeHook: Boolean; stdcall;
begin
   UnHookWindowsHookEx(NextHookHandle);
   Result := true;
end;

exports SetHook, FreeHook;

begin
end.
önce yukarıdaki kodu derleyin. sonra programınızda şu şekilde çağırınız.

Kod: Tümünü seç

.
.
.
function SetHook  : Boolean; stdcall; external 'WinKeyHook.dll';
function FreeHook : Boolean; stdcall; external 'WinKeyHook.dll';

implementation
.
.
.
procedure TForm1.Checkbox1Click(Sender : TObject);
begin
   if CheckBox1.Checked then
      SetHook
   else
      FreeHook;
end;
.
.
.
procedure TForm1..FormClose(Sender: TObject; var Action: TCloseAction);
begin
   FreeHook;
end;
.
.
.
Elbetteki DLL ile EXE aynı klasörde olacaktır. Yaw DLL olmasın ben bunu sadece EXE'ye koyayım demeyin. O zaman sistem genelini kapsamaz.

Saygılar.
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

konu başlıkla çok alakasız buldum içeriğini açıp bakmasa idim...
işime yaracak bir sey bulamayacaktım...Forum kurallarında bu mevzuya değiniliyor eminimki sizde okudunuz...! (Ben Okumadım arkadaşlarımın ve kendi yediğim fırçalar sonucu bu kanıya vardım :D )
Siz hayal edin...Biz yapalım TuannaSoft...
Cevapla