Averigüe si el proceso responde sin usar System.Diagnostics.Process.Responding

Buen día a todos.

Este problema fue parte deotro que como se resolvió, me di cuenta de que lo que pensé que era el problema después de todo, no lo era. Aún así gracias a eso he aprendido un par de cosas.

Mi aplicación trabaja mucho con IE y, de vez en cuando, IE es redirigido a un sitio web con algún código Javascript incorrecto que termina bloqueando la interfaz de IE. Y, en consecuencia, bloquear mi aplicación también una vez que todo en mi aplicación se ejecuta en la mismaThread.

Para contrarrestar ese problema, al iniciar mi aplicación ejecuta unstatic method en otroThread que cada 15 segundos verifica si IE responde o no, y si IE no responde, cierra todos sus procesos, liberando el bloqueo de la aplicación principalThread y luego mi aplicación puede reanudar su trabajo.

Para saber si los procesos de IE están respondiendo, tenía un código simple como este:

bool terminate = false;
foreach (System.Diagnostics.Process exe in System.Diagnostics.Process.GetProcesses())
{
    if (exe.ProcessName.StartsWith("iexplore"))
    {
        if (exe.Responding == false)
        {
            terminate = true;
            break;
        }
    }
}
// Code to close all IE process's...

Para elProcess.Responding la propiedad encuentra si el proceso responde y de acuerdo con la información sobreMSDN, esta propiedad necesita otra propiedad llamadaMainWindowHandle estar disponible para completar el proceso de verificación. Y siMainWindowHandle no está disponibleProcess.Responding siempre devuelve verdadero incluso si el proceso no responde.

Y por alguna razón que no sé. En Windows XPMainWindowHandle no está disponible allí, asíResponding no es exacto

Es por eso que necesito saber otra forma de encontrar si un proceso específico responde o no en Windows XP.

Cualquier ayuda es apreciada, gracias.

PD: Si está buscando un sitio web para congelar IE aquí va:http://aboutmycollege.com/

EDITAR: siguiendo la sugerencia 0xA3:

Revisé todos los procesos de IE para verificar si tenían elMainWindowHandle propiedad, los que tenían esa propiedad les mandoResponding propiedad de un cuadro de mensaje e informan correctamente cuando IE no responde en Windows 7 pero no en XP.

Ejecuté este código cada 15 segundos:

        foreach (System.Diagnostics.Process exe in System.Diagnostics.Process.GetProcesses())
        {
            if (exe.ProcessName.StartsWith("iexplore"))
            {
                if (exe.MainWindowHandle == IntPtr.Zero)
                {
                    System.Windows.Forms.MessageBox.Show("Process doesn't have MainWindowHandle");
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show("Process Responding: " + exe.Responding.ToString());
                }
            }
        }

En Windows 7 y Xp, informa los procesos de IE que no tienen elMainWindowHandle propiedad, y en Windows 7 también informa correctamente cuando IE no responde. Pero en XP todos los procesos de IE tienenMainWindowHandle siempre están respondiendo incluso cuando no lo están.

Respuestas a la pregunta(1)

Su respuesta a la pregunta