Вы можете легко использовать тип Process
для отслеживания сбоев.
Однако сложно определить, является ли приложение «временно занятым» или фактически «зависшим», поэтомунам нужно сделать несколько предположений.
Допустим, это приложение Windows Form (в VB6) с активным насосом сообщений.
Позвольте также сказать, что тайм-аут в 10 секунд является хорошим показателем «зависшего» приложения.
Любая функция, которая зависит от того, что насос сообщений завершает работу, будет хорошим индикаторомзависшего приложения, учитывая, что оно превышает время ожидания.
Вы можете использовать любую из команд SendMessage
, чтобы «присоединиться» к насосу сообщений другого приложения.
Примерно так:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
...
NativeMethods.SendMessage(hWnd, NativeMethods.WM_GETTEXTLENGTH, IntPtr.Zero, IntPtr.Zero)