En una temporada un cliente mío tenía problemas con su modem, para solucionarlo temporalmente optamos por detectar cuando el modem comenzaba a fallar y lo "reiniciábamos", entonces perdíamos la conexión con el ISP solo por unos pocos segundos. Para “detectar” el momento en que el modem fallaba lo único que teníamos que hacer era un “ping ip_dns –t”, y concentrarnos en el momento en que el DNS dejaba de responder por lapsos inaceptables.
Sin embargo tener una ventana de la consola abierta y tener que enfocarla cada cierto tiempo era una molestia, la solución a ambos problemas sería una ventana emergente o mejor aún un BallonTip sobre el SysTray usando la API IcmpSendEcho para realizar el éco.
function GetIpErrorString(ErrorCode: Cardinal; Buffer: PWideChar; var Size: Integer): Cardinal; stdcall external 'iphlpapi'; function MessageBoxTimeoutW(hWnd: Cardinal; lpText, lpCaption: PChar; uType, wLanguageId, dwMilliseconds: Cardinal): Cardinal; stdcall external 'user32'; function _itoa(Value: Integer; lpBuffer: PChar; Radix: Integer): PChar; cdecl external 'ntdll';
El código adjuntado ha sido modificado para resolver el IP del foro y utiliza tres APIs que son bastante prácticas; la API GetIpErrorString facilita el manejo de mensajes de error, la API MessageBoxTimeoutW muestra un mensaje solo por un determinado tiempo y la API _itoa nos facilita realizar conversiones desde la base 10 a cualquier otra sin usar la unidad SysUtils o escribiendo código.
Enjoy!