в этом компоненте используется следующая функция:
| Код | function IsConnectedToInternet(host: string; timeOut: Cardinal): boolean; var hInet, hInetUrl: Pointer; begin Result := false; hInet := InternetOpen('XNetDetect v2.0', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try InternetSetOption(hInet, INTERNET_OPTION_CONNECT_TIMEOUT, @timeOut, sizeOf(timeOut)); hInetUrl := InternetOpenUrl(hInet, PChar(host), nil, 0, INTERNET_FLAG_KEEP_CONNECTION or INTERNET_FLAG_NO_CACHE_WRITE or INTERNET_FLAG_RELOAD or INTERNET_FLAG_NO_AUTO_REDIRECT, 0); if Assigned(hInetUrl) then begin InternetCloseHandle(hInet); Result := true; end else InternetCloseHandle(hInet); except InternetCloseHandle(hInet); end; end; |
вызывается она там из потока, чтобы предотвратить зависание основного потока на время соединения. Результат проверки доступен, как я понял, потом по событию OnConnectionStatus. Также в компоненте есть таймер, так что проверка может осуществляться с заданной периодичностью. При изменении статуса происходит событие OnConnectionStatusChanged. Мое мнение, что если проверка нужна всего один раз, то такой компонент - излишество. Особенно, если пишется приложение без vcl, т.к. компонент его активно использует. |