Process.CloseMainWindow メソッド

定義

メイン ウィンドウに閉じるメッセージを送信して、ユーザー インターフェイスを持つプロセスを閉じます。

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

返品

true 閉じるメッセージが正常に送信された場合。関連付けられたプロセスにメイン ウィンドウがない場合、またはメイン ウィンドウが無効になっている場合 (モーダル ダイアログが表示されている場合など) に false します。

例外

プロセスは既に終了しています。

-又は-

この Process オブジェクトにはプロセスは関連付けされません。

次の例では、メモ帳のインスタンスを開始します。 次に、関連付けられているプロセスの物理メモリ使用量を 2 秒間隔で最大 10 秒間取得します。 この例では、10 秒が経過する前にプロセスが終了するかどうかを検出します。 この例では、プロセスが 10 秒後も実行されている場合は、プロセスを閉じます。

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

注釈

プロセスが実行中の場合、メッセージ ループは待機状態になります。 メッセージ ループは、オペレーティング システムによって Windows メッセージがプロセスに送信されるたびに実行されます。 CloseMainWindowを呼び出すと、メイン ウィンドウを閉じる要求が送信されます。この要求は、整形式のアプリケーションでは子ウィンドウを閉じ、アプリケーションの実行中のすべてのメッセージ ループを取り消します。 CloseMainWindowを呼び出してプロセスを終了する要求は、アプリケーションを強制的に終了しません。 アプリケーションは、終了する前にユーザーの確認を要求することも、終了を拒否することもできます。 アプリケーションを強制的に終了するには、 Kill メソッドを使用します。 CloseMainWindowの動作は、システム メニューを使用してアプリケーションのメイン ウィンドウを閉じるユーザーの動作と同じです。 したがって、メイン ウィンドウを閉じてプロセスを終了する要求は、アプリケーションをすぐに終了させるわけではありません。

プロセスによって編集されたデータまたはプロセスに割り当てられたリソースは、 Kill呼び出すと失われる可能性があります。 Kill は異常なプロセス終了を引き起こし、必要な場合にのみ使用する必要があります。 CloseMainWindow は、プロセスを順番に終了し、すべてのウィンドウを閉じるので、インターフェイスを持つアプリケーションに適しています。 CloseMainWindow失敗した場合は、Killを使用してプロセスを終了できます。 Kill は、グラフィカル インターフェイスを持たないプロセスを終了する唯一の方法です。

KillCloseMainWindowは、ローカル コンピューターで実行されているプロセスに対してのみ呼び出すことができます。 リモート コンピューター上のプロセスを終了させることはできません。 リモート コンピューターで実行されているプロセスの情報のみを表示できます。

適用対象