При проверке свойства Process.Responding
вызывается функция Windows SendMessageTimeout
.
Эта функция в основном отправляет сообщение в главное окно другого процессаи проверяет, принимает ли окно сообщение в течение времени ожидания 5000 мс (поэтому проверка этого свойства в консольном приложении не имеет никакого эффекта).
Если вы хотите использовать пользовательское время ожидания, вы также можете вызватьSendMessageTimeout
Действуй сам:
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(
HandleRef hWnd,
int msg,
IntPtr wParam,
IntPtr lParam,
int flags,
int timeout,
out IntPtr pdwResult);
const int SMTO_ABORTIFHUNG = 2;
public bool RespondingWithinMs(Process process, int timeoutMs)
{
IntPtr ptr2;
return SendMessageTimeout(
new HandleRef(process, process.MainWindowHandle),
0,
IntPtr.Zero,
IntPtr.Zero,
SMTO_ABORTIFHUNG,
timeoutMs,
out ptr2) != IntPtr.Zero;
}