Process.CloseMainWindow Methode

Definitie

Hiermee sluit u een proces met een gebruikersinterface door een sluitend bericht naar het hoofdvenster te verzenden.

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

Retouren

true als het bericht sluiten is verzonden; false als het bijbehorende proces geen hoofdvenster heeft of als het hoofdvenster is uitgeschakeld (bijvoorbeeld als er een modaal dialoogvenster wordt weergegeven).

Uitzonderingen

Het proces is al afgesloten.

– of –

Er is geen proces gekoppeld aan dit Process object.

Voorbeelden

In het volgende voorbeeld wordt een exemplaar van Kladblok gestart. Vervolgens wordt het fysieke geheugengebruik van het bijbehorende proces opgehaald met een interval van 2 seconden voor een maximum van 10 seconden. In het voorbeeld wordt gedetecteerd of het proces wordt afgesloten voordat 10 seconden zijn verstreken. In het voorbeeld wordt het proces gesloten als het nog steeds na 10 seconden wordt uitgevoerd.

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);
            }
        }
    }
}
open System.ComponentModel
open System.Diagnostics
open System.IO
open System.Threading


try
    use myProcess = Process.Start "Notepad.exe"
    // Display physical memory usage 5 times at intervals of 2 seconds.
    let mutable i = 0

    while i < 5 && not myProcess.HasExited do
        // Discard cached information about the process.
        myProcess.Refresh()
        // Print working set to console.
        printfn $"Physical Memory Usage: {myProcess.WorkingSet64}"
        // Wait 2 seconds.
        Thread.Sleep 2000
        i <- i + 1
    // Close process by sending a close message to its main window.
    myProcess.CloseMainWindow() |> ignore
    // Free resources associated with process.
    myProcess.Close()
with
| :? Win32Exception
| :? FileNotFoundException as e ->
    printfn "The following exception was raised: "
    printfn $"{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

Opmerkingen

Wanneer een proces wordt uitgevoerd, heeft de berichtlus een wachtstatus. De berichtenlus wordt telkens uitgevoerd wanneer een Windows bericht door het besturingssysteem naar het proces wordt verzonden. Als u aanroept CloseMainWindow , wordt een aanvraag verzonden om het hoofdvenster te sluiten. In een goed opgemaakte toepassing worden onderliggende vensters gesloten en worden alle actieve berichtlussen voor de toepassing ingetrokken. De aanvraag om het proces af te sluiten door aan te roepen CloseMainWindow dwingt de toepassing niet af te sluiten. De toepassing kan vragen om gebruikersverificatie voordat deze wordt afgesloten, of kan weigeren om af te sluiten. Gebruik Kill de methode om de toepassing af te sluiten. Het gedrag van CloseMainWindow een gebruiker is identiek aan die van een gebruiker die het hoofdvenster van een toepassing sluit met behulp van het systeemmenu. Daarom dwingt de aanvraag om het proces af te sluiten door het hoofdvenster te sluiten de toepassing niet onmiddellijk af te sluiten.

Gegevens die worden bewerkt door het proces of de resources die aan het proces zijn toegewezen, kunnen verloren gaan als u belt Kill. Kill veroorzaakt een abnormale procesafbreking en mag alleen worden gebruikt wanneer dat nodig is. CloseMainWindow maakt een ordelijke beëindiging van het proces mogelijk en sluit alle vensters, dus het verdient de voorkeur voor toepassingen met een interface. Als CloseMainWindow dit mislukt, kunt u het Kill proces beëindigen. Kill is de enige manier om processen te beëindigen die geen grafische interfaces hebben.

U kunt alleen bellen Kill en CloseMainWindow alleen voor processen die op de lokale computer worden uitgevoerd. U kunt niet veroorzaken dat processen op externe computers worden afgesloten. U kunt alleen informatie weergeven voor processen die worden uitgevoerd op externe computers.

Van toepassing op