Получение статуса подключения к ЛВС (27.08.2019). Печать
2019 - Август
27.08.2019 18:15
Save & Share
Возникла задача программно проверить: включено ли хоть одно сетевое подключение на аппаратуре. Реализация - на Borland C++ Builder v.6.0.

Искал самый простой способ. На форумах - только "спасите-помогите", но не решение по вопросу (было решение на несколько листов формата A4, что не устраивало). Плюс показана общая глючность работы функций Windows с состоянием сетевых карт. Однако одно такое "спасите-помогите" удалось мутировать в рабочий код.

Инкдуд: #include <WinInet.h>.
Библиотека, подключаемая в проект: WinInet.lib весом 21504б;

Исходный код:
DWORD dwFlag_Returned; //Бросовая переменная.
bool bResult= InternetGetConnectedState(&dwReturnedFlag, 0); //Подлючено - true. 0 - похож на номер сетевого подключения в системе.

Проблемы:
- возможны задержки отображения измененного состояния до 1 минуты (показывает true вместо false);
- при нескольких сетевых картах баг: подключенная карта становится нулевой.

(добавлено 03.08.2020) Более глубокое тестирование сетевых подключений требует и анализа второго параметра dwReserved.

Опытным путем установлено, что статус подключения при использовании данной функции всегда запаздывает примерно на минуту.

(добавлено 05.08.2020) Корректная работа функции возможна только при включенной службе SENS (зависящей от службы EventSystem).

(добавлено 07.08.2020) На виртуальной машине данный способ не работает: все время дает ложный результат, что подключение активно (проверено на Windows 2000).

Параметр dwReserved всегда должен быть равен 0.
Обновлено ( 07.08.2020 17:14 )