Udostępnij za pośrednictwem


Process.CloseMainWindow Metoda

Definicja

Zamyka proces, który ma interfejs użytkownika, wysyłając bliski komunikat do głównego okna.

public:
 bool CloseMainWindow();
public bool CloseMainWindow ();
member this.CloseMainWindow : unit -> bool
Public Function CloseMainWindow () As Boolean

Zwraca

true jeśli komunikat zamknięcia został pomyślnie wysłany; false jeśli skojarzony proces nie ma głównego okna lub jeśli okno główne jest wyłączone (na przykład jeśli jest wyświetlane modalne okno dialogowe).

Wyjątki

Proces został już zakończony.

-lub-

Żaden proces nie jest skojarzony z tym Process obiektem.

Przykłady

Poniższy przykład uruchamia wystąpienie Notatnika. Następnie pobiera użycie pamięci fizycznej skojarzonego procesu w 2 sekundach przez maksymalnie 10 sekund. W przykładzie wykryto, czy proces kończy się przed upływem 10 sekund. Przykład zamyka proces, jeśli nadal działa po 10 sekundach.

#using <System.dll>

using namespace System;
using namespace System::Diagnostics;
using namespace System::Threading;
int main()
{
   try
   {
      Process^ myProcess;
      myProcess = Process::Start(  "Notepad.exe" );
      
      // Display physical memory usage 5 times at intervals of 2 seconds.
      for ( int i = 0; i < 5; i++ )
      {
         if (  !myProcess->HasExited )
         {
            
            // Discard cached information about the process.
            myProcess->Refresh();
            
            // Print working set to console.
            Console::WriteLine( "Physical Memory Usage : {0}", myProcess->WorkingSet.ToString() );
            
            // Wait 2 seconds.
            Thread::Sleep( 2000 );
         }
         else
         {
            break;
         }

      }
      myProcess->CloseMainWindow();
      
      // Free resources associated with process.
      myProcess->Close();
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The following exception was raised: " );
      Console::WriteLine( e->Message );
   }

}
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Threading;

namespace ProcessSample
{
    class MyProcessClass
    {
        public static void Main()
        {
            try
            {
                using (Process myProcess = Process.Start("Notepad.exe"))
                {
                    // Display physical memory usage 5 times at intervals of 2 seconds.
                    for (int i = 0; i < 5; i++)
                    {
                        if (!myProcess.HasExited)
                        {
                            // Discard cached information about the process.
                            myProcess.Refresh();
                            // Print working set to console.
                            Console.WriteLine($"Physical Memory Usage: {myProcess.WorkingSet}");
                            // Wait 2 seconds.
                            Thread.Sleep(2000);
                        }
                        else
                        {
                            break;
                        }
                    }

                    // Close process by sending a close message to its main window.
                    myProcess.CloseMainWindow();
                    // Free resources associated with process.
                    myProcess.Close();
                }
            }
            catch (Exception e) when (e is Win32Exception || e is FileNotFoundException)
            {
                Console.WriteLine("The following exception was raised: ");
                Console.WriteLine(e.Message);
            }
        }
    }
}
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.IO
Imports System.Threading

Namespace Process_Sample
    Class MyProcessClass

        Public Shared Sub Main()
            Try
                Using myProcess = Process.Start("Notepad.exe")
                    ' Display physical memory usage 5 times at intervals of 2 seconds.
                    Dim i As Integer
                    For i = 0 To 4
                        If Not myProcess.HasExited Then

                            ' Discard cached information about the process.
                            myProcess.Refresh()
                            ' Print working set to console.
                            Console.WriteLine($"Physical Memory Usage: {myProcess.WorkingSet}")
                            ' Wait 2 seconds.
                            Thread.Sleep(2000)
                        Else
                            Exit For
                        End If

                    Next i

                    ' Close process by sending a close message to its main window.
                    myProcess.CloseMainWindow()
                    ' Free resources associated with process.
                    myProcess.Close()
                End Using
            Catch e As Exception When TypeOf e Is Win32Exception Or TypeOf e Is FileNotFoundException
                Console.WriteLine("The following exception was raised: ")
                Console.WriteLine(e.Message)
            End Try
        End Sub
    End Class
End Namespace 'Process_Sample

Uwagi

Gdy proces jest wykonywany, pętla komunikatów jest w stanie oczekiwania. Pętla komunikatów jest wykonywana za każdym razem, gdy komunikat systemu Windows jest wysyłany do procesu przez system operacyjny. Wywołanie CloseMainWindow wysyła żądanie zamknięcia okna głównego, które w dobrze sformułowanej aplikacji zamyka okna podrzędne i odwołuje wszystkie uruchomione pętle komunikatów dla aplikacji. Żądanie zakończenia procesu przez wywołanie CloseMainWindow metody nie wymusza zamknięcia aplikacji. Aplikacja może poprosić o weryfikację użytkownika przed zamknięciem lub odmówić jej zamknięcia. Aby wymusić zamknięcie aplikacji, użyj Kill metody . Zachowanie jest identyczne z zachowaniem CloseMainWindow użytkownika zamykającego główne okno aplikacji przy użyciu menu systemowego. W związku z tym żądanie zakończenia procesu przez zamknięcie okna głównego nie wymusza natychmiastowego zamknięcia aplikacji.

Dane edytowane przez proces lub zasoby przydzielone do tego procesu mogą zostać utracone, jeśli wywołasz metodę Kill. Kill powoduje nieprawidłowe zakończenie procesu i należy go używać tylko wtedy, gdy jest to konieczne. CloseMainWindow umożliwia uporządkowane zakończenie procesu i zamyka wszystkie okna, dlatego zaleca się, aby aplikacje z interfejsem. Jeśli CloseMainWindow proces zakończy się niepowodzeniem, możesz użyć Kill polecenia , aby zakończyć proces. Kill jest jedynym sposobem na zakończenie procesów, które nie mają interfejsów graficznych.

Można wywoływać Kill metody i CloseMainWindow tylko dla procesów uruchomionych na komputerze lokalnym. Nie można spowodować zakończenia procesów na komputerach zdalnych. Można wyświetlać tylko informacje dotyczące procesów uruchomionych na komputerach zdalnych.

Dotyczy