2012-01-23 3 views
3

У меня возникла проблема с приложением, которое, похоже, отменяет выключение или перезагрузку моего компьютера. Я думаю, это потому, что я захватить событие формы закрытия и отменить его, как это:Объявление об отмене приложения

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

Я делаю это так, что кнопка закрытия только минимизирует к панели задач. Тем не менее, я хочу, чтобы вы могли перезапускаться, не выходя из приложения. Есть лучший способ сделать это? Или способ узнать, закрывает ли окно приложение?

EDIT: Спасибо за ответы. Извините, я мог выбрать только правильный, я просто пошел с лучшим. Еще раз спасибо!

ответ

2

Вы можете использовать CloseReason, чтобы обнаружить, если форма закрывается пользователем или лучше (в вашем случае) использовать SystemEvents -класса, чтобы получить событие, когда система пытается выйти из системы или выключить/перезапустить, чтобы вы могли закрыть приложение, когда оно сведено к минимуму.

1

Проверьте аргументы события CloseReason и ничего не сделайте, если это либо WindowsShutDown, либо TaskManagerClosing.

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). он заинтересован в том, чтобы не отменять закрытие своего приложения, когда окна закрываются. –

Смежные вопросы