{Static linking. }uses
WinInet;
{...}function IsConnectedToInternet: Boolean;
var
dwConnectionTypes: DWORD;
begin
dwConnectionTypes :=
INTERNET_CONNECTION_MODEM +
INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
Result := InternetGetConnectedState(@dwConnectionTypes, 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
beginif IsConnectedToInternet then
ShowMessage('Connected.')
else
ShowMessage('Not Connected.')
end;
Here's the translation of the text into Russian:
Код проверяет наличие активной связи с интернетом на платформе Windows с помощью Delphi. Он использует библиотеку WinInet, которая предоставляет функции для работы с сетевыми соединениями.
Вот как это работает:
Функция IsConnectedToInternet получает текущие типы соединений с помощью функции InternetGetConnectedState из WinInet. Эта функция принимает два параметра: указатель на переменную, которая будет получать тип(ы) соединения, и значение, указывающее, нужно ли получить только основное соединение.
В этом случае мы устанавливаем dwConnectionTypes в сочетание трех типов соединений:
INTERNET_CONNECTION_MODEM: соединение модема
INTERNET_CONNECTION_LAN: локальная сеть (LAN)
INTERNET_CONNECTION_PROXY: соединение через прокси-сервер
Функция InternetGetConnectedState возвращает логическое значение, указывающее, есть ли активное соединение. Это значение присваивается переменной Result функции IsConnectedToInternet.
В обработчике события Button1Click мы вызываем функцию IsConnectedToInternet и проверяем ее результат. Если он истинен, мы отображаем сообщение об ошибке "Connected.". Иначе, мы отображаем сообщение об ошибке "Not Connected.".
Альтернативное решение с использованием компонента TIdStack из библиотеки Indy:
uses
IdStack;
function IsConnectedToInternet: Boolean;
begin
Result := TIdStack.GetStackStatusBits = [ssfConnected];
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if IsConnectedToInternet then
ShowMessage('Connected.')
else
ShowMessage('Not Connected.');
end;
В этом решении мы используем метод GetStackStatusBits компонента TIdStack, чтобы проверить наличие активного соединения. Если результат равен [ssfConnected], то это означает, что есть подключенный сокет, и мы отображаем сообщение об ошибке "Connected.". Иначе, мы отображаем сообщение об ошибке "Not Connected.".
Обратите внимание, что Indy не так широко используется, как WinInet, но он предоставляет болееadvanced функциональность для сетевых соединений и может быть хорошим альтернативой в определенных ситуациях.
Определение активного соединения с Интернетом в программном коде на Delphi с помощью функции InternetGetConnectedState.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS