使用C#实现Windows下无焦点窗体

来源:互联网 发布:cs1.6 mac版下载地址 编辑:程序博客网 时间:2024/06/06 05:10
  1.         [System.Runtime.InteropServices.DllImport("user32.dll")]
  2.         private extern static IntPtr SetActiveWindow(IntPtr handle);
  3.         private const int WM_ACTIVATE = 0x006;
  4.         private const int WM_ACTIVATEAPP = 0x01C;
  5.         private const int WM_NCACTIVATE = 0x086;
  6.         private const int WA_INACTIVE = 0;
  7.         private const int WM_MOUSEACTIVATE = 0x21;
  8.         private const int MA_NOACTIVATE = 3;
  9.         protected override void WndProc(ref Message m)
  10.         {
  11.             if (m.Msg == WM_MOUSEACTIVATE)
  12.             {
  13.                 m.Result = new IntPtr(MA_NOACTIVATE);
  14.                 return;
  15.             }
  16.             else if (m.Msg == WM_NCACTIVATE)
  17.             {
  18.                 if (((int)m.WParam & 0xFFFF) != WA_INACTIVE)
  19.                 {
  20.                     if (m.LParam != IntPtr.Zero)
  21.                     {
  22.                         SetActiveWindow(m.LParam);
  23.                     }
  24.                     else
  25.                     {
  26.                         SetActiveWindow(IntPtr.Zero);
  27.                     }
  28.                 }
  29.             }
  30.             base.WndProc(ref m);
  31.         } 
后面一段else if WM_NCACTIVATE是不必要的,如果窗口一开始是用ShowWindow且NOACTIVATE来启动的话。