ANASAYFA | BLOG | SORU CEVAP | REFERANSLARIM | DOWNLOAD | HAKKIMDA | İLETİŞİM | ARAMA
C# WINDOWS TUŞUNU ENGELLEMEK

windows-tuşu

Bazen programımızda kullanıcıyı kısıtlamak isteyebiliriz. Programımızı çalıştırdıktan sonra biz izin vermedikçe programdan çıkmasını engelleyebiliriz. Bunun için daha önceki yazılarımda belirttiğim ALT+F4, CTRL+ALT+DEL, ALT+TAB engellemeleriyle birlikte Windows tuşunu da engellememiz gerekiyor. Özellikle windows8 işletim sistemiyle birlikte bu tuşun işlevi bildiğiniz üzere daha çok önem kazandı. Programda Windows tuşunu engelleyerek kullanıcının programdan çıkmasını diğer işlemlerle birlikte tamamen engelleyebiliriz.

C# ile kullanıcının klavyeden bastığı tuşlara göre işlem yaptırmayı daha önce çeşitli örneklerle yapmıştık. Şimdi de Kullanıcının Windows tuşuna basıp basmadığını kontrol edip, basılan tuş eğer Sağ yada Sol Windows tuşu ise bunu engelleyeceğiz. Bu tuşların kod tarafındaki karşılığı RWin ve LWin. Şimdi isterseniz nasıl yapacağımızı kodlar üzerinde görelim.

FK-gizle

Dilerseniz projeyi indirerek kendinizde deneyebilirsiniz. Öncelikle projemize

using System.Diagnostics;

using System.Runtime.InteropServices;

kütüphanelerini ekliyoruz. Ardından diğer gerekli referans DLL lerini ve Programımızda kullanacağımız bir Structure ekliyoruz.

Öncelikle Structure ımızı tanımlıyoruz;

        [StructLayout(LayoutKind.Sequential)]

        private struct KeyboardDLLStruct

        {

            public Keys key;

            public int scanCode;

            public int flags;

            public int time;

            public IntPtr extra;

        }

 

Şimdi de kullanacağımız DLL leri tanımlıyoruz

        private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]

        private static extern IntPtr SetWindowsHookEx(int id, LowLevelKeyboardProc callback, IntPtr hMod, uint dwThreadId);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]

        private static extern bool UnhookWindowsHookEx(IntPtr hook);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]

        private static extern IntPtr CallNextHookEx(IntPtr hook, int nCode, IntPtr wp, IntPtr lp);

        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]

        private static extern IntPtr GetModuleHandle(string name);

        [DllImport("user32.dll", CharSet = CharSet.Auto)]

        private static extern short GetAsyncKeyState(Keys key);

 

Son olarak da Programımızda kullanacağımız Global değişkenleri tanımlayalım

 

        private IntPtr ptrHook;

        private LowLevelKeyboardProc objKeyboardProcess;

 

Artık program tarafına geçebiliriz. Form umuzun default constructor ına

            ProcessModule objCurrentModule = Process.GetCurrentProcess().MainModule;

            objKeyboardProcess = new LowLevelKeyboardProc(captureKey);

            ptrHook = SetWindowsHookEx(13, objKeyboardProcess, GetModuleHandle(objCurrentModule.ModuleName), 0);

 

kodlarını ekliyoruz.[Form1(){…} içerisine eklenecek]

Aşağıdaki fonksiyonuda kodumuza eklediğimizde programımız tamamlanmış olacak. Artık Windows tuşunu engellemiş olucaz.

 

private IntPtr captureKey(int nCode, IntPtr wp, IntPtr lp)

        {

            if (nCode >= 0)

            {

                KeyboardDLLStruct objKeyInfo = (KeyboardDLLStruct)Marshal.PtrToStructure(lp, typeof(KeyboardDLLStruct));

 

                if (objKeyInfo.key == Keys.RWin || objKeyInfo.key == Keys.LWin)

                {

                    return (IntPtr)1;

                }

            }

            return CallNextHookEx(ptrHook, nCode, wp, lp);

        }

 

//ÖRNEK PROJE İNDİR




Diğer Yazılarımdan Seçmeler...