2012-01-23 62 views
3

我遇到了似乎取消关闭或重新启动计算机的应用程序的问题。 我想这是因为我拍摄的形式关闭事件,并取消它是这样的:取消关闭应用程序

private void Main_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (!AllowApplicationClose) 
    { 
     e.Cancel = true; 
     this.WindowState = FormWindowState.Minimized; 
    } 
} 

我这样做,这样的关闭按钮只是最小化到任务栏。我确实希望能够在不退出应用程序的情况下重新启动。有一个更好的方法吗?或者一种方法来知道Windows是否关闭应用程序?

编辑:谢谢你的答案。对不起,我只能选择一个正确的,我只是选择了一个。再次感谢!

回答

2

您可以使用CloseReason检测如果表格由用户或更好的(你的情况)被关闭使用SystemEvents -class获得当事件系统正在尝试注销或关闭/重新启动,以便在应用程序最小化时关闭该应用程序。

1

检查事件参数的CloseReason,如果它是WindowsShutDownTaskManagerClosing,则不执行任何操作。

2

首先检查e.CloseReason;只有在用户启动时才会取消:CloseReason.UserClosing

在这里看到其他的值,你可以使用:CloseReason (MSDN)

0

使用线程计时器过程,然后下面的过程分别关闭Windows进程。

public void Computer_Shutdown() 
     { 
      if (this.checkBox.Checked) 
      { 
       System.Diagnostics.Process[] processes = 
        System.Diagnostics.Process.GetProcesses(); 

       foreach (System.Diagnostics.Process 
          processParent in processes) 
       { 
        System.Diagnostics.Process[] processNames = 
           System.Diagnostics.Process. 
           GetProcessesByName 
           (processParent.ProcessName); 

        foreach (System.Diagnostics.Process 
          processChild in processNames) 
        { 
         try 
         { 
          System.IntPtr hWnd = 
            processChild.MainWindowHandle; 

          if (IsIconic(hWnd)) 
          { 
           ShowWindowAsync(hWnd, SW_RESTORE); 
          } 

          SetForegroundWindow(hWnd); 

          if (!(processChild. 
           MainWindowTitle.Equals(this.Text))) 
          { 
           processChild.CloseMainWindow(); 
           processChild.Kill(); 
           processChild.WaitForExit(); 
          } 
         } 
         catch (System.Exception exception) 
         { 

         } 
        } 
       } 
      } 
+0

这将结束进程,我不认为这是原始海报(OP)想要做的。他有兴趣在Windows关闭时不取消他的应用程序关闭。 –