title: key capture using global hotkey in C#
body: <p>I have a application that runs in the background like i may keep my app in the system tray.If it remains on system tray my app will do it's job. Whenever a user press F10 or F9 some works will be done. i tried this:</p>
  
  <pre><code>public partial class Form1 : Form
  {
      public int a = 1;
  
      [DllImport("user32.dll")]
      public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
      [DllImport("user32.dll")]
      public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
  
  
      [DllImport("User32.dll")]
      private static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey);
      [DllImport("User32.dll")]
      private static extern short GetAsyncKeyState(System.Int32 vKey);
  
      const int MYACTION_HOTKEY_ID = 1;
  
      public Form1()
      {
          InitializeComponent();
          RegisterHotKey(this.Handle, MYACTION_HOTKEY_ID, 0, (int) Keys.F9);
          RegisterHotKey(this.Handle, MYACTION_HOTKEY_ID, 0, (int)Keys.F10);
  
          this.ShowInTaskbar = false;
      }
  
      protected override void WndProc(ref Message m)
      {
          if (m.Msg == 0x0312 &amp;&amp; m.WParam.ToInt32() == MYACTION_HOTKEY_ID &amp;&amp; (GetAsyncKeyState(Keys.F9) == -32767))
          {
              if ((a % 2) != 0)
              {
                  a++;
                  MessageBox.Show(a.ToString()+"not equal F9");
                  label1.Text = "not equal F9";
              }
  
              if ((a % 2) == 0)
              {
                  a++;
                  MessageBox.Show(a.ToString()+"equal F9");
                  label1.Text = " equal F9";
              }
  
          }
  
          else if (m.Msg == 0x0312 &amp;&amp; m.WParam.ToInt32() == MYACTION_HOTKEY_ID &amp;&amp; (GetAsyncKeyState(Keys.F10) == -32767))
          {
              if ((a % 2) != 0)
              {
                  a++;
                  MessageBox.Show(a.ToString() + "not equal F10");
                  label1.Text = "not equal F10";
              }
  
              if ((a % 2) == 0)
              {
                  a++;
                  MessageBox.Show(a.ToString() + "equal F10");
                  label1.Text = " equal F10";
              }
  
          }
          base.WndProc(ref m);
      }
  
  }
  </code></pre>
  
  <p>As i use set "this.ShowInTaskbar = false" this line it doesn't work.But if i don't set this it works fine.For my app i have to use this line.How can i solve this????  </p>