protected override void WndProc(ref System.Windows.Forms.Message m)      
          {              
              try          
              {              
                  switch(m.Msg)              
                  {                                         
                      case WM_QUERYENDSESSION:                          
                          m.Result = (IntPtr)WM_TRUE;                          
                          return;                          
                      //休眠事件处理                                          
                      case WM_POWERBROADCAST :                          
                       if (m.WParam == (IntPtr)PBT_APMQUERYSUSPEND)                          
                          {                              
                                                 
                          }                      
                          break;                      
                      default:                  
                          break;              
                  }                  
                  base.WndProc (ref m);              
              }                          
              catch(Exception e)          
              {                  
                  MessageBox.Show(e.Message);      
              }      
          } 

解决方案 »

  1.   

    你这个问题问的已经不是问题了你可以让Form2获得消息后通知Form1不就ok了么
      

  2.   

    protected override void WndProc(ref   Message m)
            {
                switch (m.Msg)
                {
                    case 0x0011:
                        MessageBox.Show("想要关机,先关闭本程序");
                        m.Result = (IntPtr)0;
                        break;
                    default:
                        base.WndProc(ref m);
                        break;
                }
            }
      

  3.   

    如果是默认Form2,可以先在Form2得到关机消息再通知Form1的吧
      

  4.   

    关键问题是怎么通知Form1?不会啊,大哥们帮帮忙~~~~
      

  5.   

    老问题了。直接在窗体的Close事件中,判断e.CloseResion是否是ShutDown哪项即可。
      

  6.   

    Microsoft.Win32.SystemEvents.SessionEnded

    Microsoft.Win32.SystemEvents.SessionEnding
    事件
      

  7.   

     //截获系统关机消息
            private bool isExitApp = false;
            private const int WM_QUERYENDSESSION = 0x0011;
            protected override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    case WM_QUERYENDSESSION:
                        isExitApp = true;
                        Application.Exit();
                        base.WndProc(ref m); 
                        break;
                    default:
                        base.WndProc(ref m);
                        break;
                }        }将这段代码加到程序中,在系统关机时,程序先关闭,系统再关闭,够全了吧。