Pues el siguiente código no lo he podido probar porque no uso módem, pero debería funcionar. Pruebalo y nos lo confirmas.
Código Delphi
[-]
uses WinInet;
function Conectado: Boolean;
var
Flags: DWORD;
begin
Result:= FALSE;
if InternetGetConnectedState(@Flags,0) then
if Flags and INTERNET_CONNECTION_MODEM = INTERNET_CONNECTION_MODEM then
Result:= TRUE;
end;
La función anterior nos dice si se esta conectado a internet usando un acceso telefónico. Para saber el tiempo que se esta conectado solo hay que utilizarla a intervalos regulares (200 milisegundos por ejemplo), e ir incrementando un contador.