Process.CloseMainWindow メソッド

定義

メイン ウィンドウにクローズ メッセージを送信して、ユーザー インターフェイスがあるプロセスを終了します。Closes a process that has a user interface by sending a close message to its main window.

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

戻り値

クローズ メッセージが正常に送信された場合は true。関連付けられたプロセスにメイン ウィンドウがない場合、またはメイン ウィンドウが使用できない場合 (モーダル ダイアログ ボックスが表示されているときなど) は falsetrue if the close message was successfully sent; false if the associated process does not have a main window or if the main window is disabled (for example if a modal dialog is being shown).

例外

プロセスは既に終了しています。The process has already exited.

- または --or- この Process オブジェクトに関連付けられているプロセスはありません。No process is associated with this Process object.

次の例では、メモ帳のインスタンスを起動します。The following example starts an instance of Notepad. 次に、関連付けられたプロセスの物理メモリ使用量を2秒間隔で最大10秒間取得します。It then retrieves the physical memory usage of the associated process at 2 second intervals for a maximum of 10 seconds. この例では、10秒が経過する前にプロセスが終了するかどうかを検出します。The example detects whether the process exits before 10 seconds have elapsed. この例では、10秒後にプロセスがまだ実行されている場合、プロセスを終了します。The example closes the process if it is still running after 10 seconds.

#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

注釈

プロセスが実行されると、そのメッセージループは待機状態になります。When a process is executing, its message loop is in a wait state. メッセージループは、Windows メッセージがオペレーティングシステムによってプロセスに送信されるたびに実行されます。The message loop executes every time a Windows message is sent to the process by the operating system. CloseMainWindow を呼び出すと、メインウィンドウを閉じる要求が送信されます。これは、適切な形式のアプリケーションで、子ウィンドウを閉じ、アプリケーションの実行中のすべてのメッセージループを取り消します。Calling CloseMainWindow sends a request to close the main window, which, in a well-formed application, closes child windows and revokes all running message loops for the application. CloseMainWindow を呼び出すことによってプロセスを終了する要求では、アプリケーションが強制的に終了されることはありません。The request to exit the process by calling CloseMainWindow does not force the application to quit. アプリケーションは、終了する前にユーザーの確認を要求することも、終了を拒否することもできます。The application can ask for user verification before quitting, or it can refuse to quit. アプリケーションを強制的に終了するには、Kill メソッドを使用します。To force the application to quit, use the Kill method. CloseMainWindow の動作は、[システム] メニューを使用してアプリケーションのメインウィンドウを閉じるユーザーの動作と同じです。The behavior of CloseMainWindow is identical to that of a user closing an application's main window using the system menu. そのため、メインウィンドウを閉じてプロセスを終了する要求では、アプリケーションが直ちに終了することはありません。Therefore, the request to exit the process by closing the main window does not force the application to quit immediately.

プロセスによって編集されたデータまたはプロセスに割り当てられたリソースは、Killを呼び出すと失われることがあります。Data edited by the process or resources allocated to the process can be lost if you call Kill. Kill によって異常なプロセスが終了し、必要な場合にのみ使用する必要があります。Kill causes an abnormal process termination, and should be used only when necessary. CloseMainWindow を使用すると、プロセスが正常に終了し、すべてのウィンドウが閉じます。そのため、インターフェイスを持つアプリケーションに適しています。CloseMainWindow enables an orderly termination of the process and closes all windows, so it is preferable for applications with an interface. CloseMainWindow が失敗した場合は、Kill を使用してプロセスを終了できます。If CloseMainWindow fails, you can use Kill to terminate the process. Kill は、グラフィカルインターフェイスを持たないプロセスを終了する唯一の方法です。Kill is the only way to terminate processes that do not have graphical interfaces.

ローカルコンピューター上で実行されているプロセスに対してのみ Kill および CloseMainWindow を呼び出すことができます。You can call Kill and CloseMainWindow only for processes that are running on the local computer. リモートコンピューター上のプロセスを終了させることはできません。You cannot cause processes on remote computers to exit. リモートコンピューター上で実行されているプロセスの情報のみを表示できます。You can only view information for processes running on remote computers.

セキュリティ

LinkDemand
直前の呼び出し元に対する完全な信頼の場合。for full trust for the immediate caller. このメンバーは、部分的に信頼されているコードから使用することはできません。This member cannot be used by partially trusted code.

適用対象