title: Blocking shortcut keys using c#
body: <p>I am using the below code to disable the Alt+Tab, Alt+Esc, Ctrl+Esc, and Windows Key but somehow it is not working. Please help me rectify it.</p>
  
  <pre><code>namespace BlockShortcuts
  {
      public partial class Form1 : Form
      {
          public Form1()
          {
              InitializeComponent();
          }
  
          private delegate int LowLevelKeyboardProcDelegate(int nCode, int
             wParam, ref KBDLLHOOKSTRUCT lParam);
  
          [DllImport("user32.dll", EntryPoint = "SetWindowsHookExA", CharSet = CharSet.Ansi)]
          private static extern int SetWindowsHookEx(
             int idHook,
             LowLevelKeyboardProcDelegate lpfn,
             int hMod,
             int dwThreadId);
  
          [DllImport("user32.dll")]
          private static extern int UnhookWindowsHookEx(int hHook);
  
          [DllImport("user32.dll", EntryPoint = "CallNextHookEx", CharSet = CharSet.Ansi)]
          private static extern int CallNextHookEx(
              int hHook, int nCode,
              int wParam, ref KBDLLHOOKSTRUCT lParam);
  
          const int WH_KEYBOARD_LL = 13;
          private int intLLKey;
          private KBDLLHOOKSTRUCT lParam;
  
          private struct KBDLLHOOKSTRUCT
          {
              public int vkCode;
              int scanCode;
              public int flags;
              int time;
              int dwExtraInfo;
          }
  
          private int LowLevelKeyboardProc(
              int nCode, int wParam,
              ref KBDLLHOOKSTRUCT lParam)
          {
              bool blnEat = false;
              switch (wParam)
              {
                  case 256:
                  case 257:
                  case 260:
                  case 261:
                      //Alt+Tab, Alt+Esc, Ctrl+Esc, Windows Key
                      if (((lParam.vkCode == 9) &amp;&amp; (lParam.flags == 32)) ||
                      ((lParam.vkCode == 27) &amp;&amp; (lParam.flags == 32)) || ((lParam.vkCode ==
                      27) &amp;&amp; (lParam.flags == 0)) || ((lParam.vkCode == 91) &amp;&amp; (lParam.flags
                      == 1)) || ((lParam.vkCode == 92) &amp;&amp; (lParam.flags == 1)) || ((true) &amp;&amp;
                      (lParam.flags == 32)))
                      {
                          blnEat = true;
                      }
                      break;
              }
  
              if (blnEat)
                  return 1;
              else return CallNextHookEx(0, nCode, wParam, ref lParam);
  
          }
  
          private void KeyboardHook(object sender, EventArgs e)
          {
              intLLKey = SetWindowsHookEx(WH_KEYBOARD_LL,new LowLevelKeyboardProcDelegate(LowLevelKeyboardProc),
                         System.Runtime.InteropServices.Marshal.GetHINSTANCE(
                         System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0]).ToInt32(), 0);
          }
  
          private void ReleaseKeyboardHook()
          {
              intLLKey = UnhookWindowsHookEx(intLLKey);
          }
  
          private void checkBox1_CheckedChanged(object sender, EventArgs e)
          {
              if (checkBox1.Checked)
                  KeyboardHook(this, e);
              else
                  ReleaseKeyboardHook();
          }
      }
  }
  </code></pre>