プロセスのユーザーインターフェイスが応答するか調べるには、Process.Respondingプロパティを使います。RespondingプロパティがTrueを返せばそのプロセスのユーザーインターフェイスは応答しており、Falseを返せばすぐには応答しないこと示しています。
なお、MainWindowHandleがないプロセスでは、このプロパティはTrueを返します。
補足:Windows98において、ProcessStartInfo.UseShellExecuteにTrueを設定してプロセスを開始した場合、このプロパティは利用できません。
次の例では、ローカルコンピュータで実行されているプロセスの中でユーザーインターフェイスが応答しないものがあるか調べ、そのIDを表示しています。
'ローカルコンピュータ上で実行されているすべてのプロセスを取得 Dim ps As System.Diagnostics.Process() = _ System.Diagnostics.Process.GetProcesses() '配列から1つずつ取り出す Dim p As System.Diagnostics.Process For Each p In ps 'プロセスのユーザーインターフェイスが応答するか調べる If Not p.Responding Then Console.WriteLine("{0}:応答なし", p.Id) End If Next p Console.WriteLine("完了")
//ローカルコンピュータ上で実行されているすべてのプロセスを取得 System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcesses(); //配列から1つずつ取り出す foreach (System.Diagnostics.Process p in ps) { //プロセスのユーザーインターフェイスが応答するか調べる if (!p.Responding) { Console.WriteLine("{0}:応答なし", p.Id); } } Console.WriteLine("完了");
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。