2013-09-17 3 views
0

Мне нужно закрыть процесс, определяющий конкретный CloseReason, из-за того, что процесс, который мне нужен, чтобы убить проверку в закрытии формы, если CloseReasonis WindowsShutDown закрывает программу, в противном случае нет:C# закрыть процесс отправки сообщения с CloseReason

private void frmMain_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (e.CloseReason != CloseReason.WindowsShutDown) 
    { 
    e.Cancel = true; 
    Hide(); 
    } 
} 

но если из другой программы я делаю это:

List<Process> pp = Process.GetProcessesByName("myProgram").ToList(); 
foreach (var p in pp) 
{ 
    p.CloseMainWindow(); 
    p.WaitForExit(); 
} 

но программа не закрыта ....

, как я могу это сделать?

+0

Какова ценность 'e.CloseReason' при запуске кода, который вы отправили? – goric

+0

Возможно, вы можете отправить сообщение окна WM_ENDSESSION. – usr

+1

использовать 'SendMessage' для отправки' WM_CLOSE' с пользовательским 'lParam' и обрабатывать его –

ответ

1

Мы не можем явно установить причину закрытия Process.Kill или CloseMainWindow(). Ниже приведены близкие причины доступны, вы можете выбрать соответствующие причины

  • ApplicationExitCall метод выхода из класса Application были вызваны.
  • FormOwnerClosing Форма владельца закрывается.
  • MdiFormClosing Родительская форма этого интерфейса с несколькими документами (MDI) закрывается.
  • None Причина закрытия не определена или не может быть определена .
  • TaskManagerClosing Приложение для диспетчера задач Microsoft Windows закрывает приложение .
  • UserClosing Пользователь закрывает форму через пользовательский интерфейс (UI), например, нажав кнопку «Закрыть» в окне формы, , выбрав «Закрыть» из меню управления окном или нажав ALT + F4.
  • WindowsShutDown Операционная система закрывает все приложения
    перед закрытием.
+0

спасибо, но Process.Kill не может пройти через frmMain_FormClosing – ghiboz

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