Process.CloseMainWindow Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
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.