В целом, тема, заявленная в посте далеко не нова – ответ на вопрос “Как в Delphi узнать, что компьютер подключен к Интернет?” на страничках из прошлого XX века. Но время оно не стоит на месте и программисты различного уровня подготовки предлагают самые различные способы проверки подключения компьютера к Интернет – от небольших листингов в 5-6 строчек кода, до умопомрачительных алгоритмов проверки.
И эти способы, вроде бы работают до сих пор и в Win 7 и в более старых версиях Windows. Расписывать все эти способы. думаю, смысла никого нет. Те кому они нужны – Google в помощь, или сразу вот такая ссылка с результатами запроса к Google.
Я же сегодня покажу ещё один из способов проверки подключения к Интернет, доступный пользователям Win Vista – 7.
Способ этот использует возможности Get Connected Wizard API – API настройки подключения. С помощью него можно, например, вызвать мастера настроек VPN, локальной сетки или, как в нашем случае – проверить подключение к Интернет.
Прежде, чем начнем знакомиться с API, ещё раз подчеркну – работа с API доступна под Windows Vista и выше. В более ранних версиях ОС работа невозможна.
Все экспортируемые функции содержаться в connect.dll.
Начнем с самой простенькой функции – IsInternetConnected
IsInternetConnected
Функция не содержит никаких параметров и, в случае успешного выполнения возвращает S_OK, если пользователь подключен к Интернет и S_FALSE в обратном случае.
Следует отметить, что эта функция только “угадывает” подключение к Интернет для пользователя, используя в работе NCSI и NLM. Хоть результат и носит некоторые вероятностный характер, проверка работы функции на моем компьютере показала удовлетворительный результат – функция не ошиблась ни разу при проверке соединений.
Примечание: очень похожая функция есть и в URL.dll, которая называется IsInetOffline – проводит проверку на “отключенность” от Интернет, но IsInetOffline возвращает false не только, когда комп подключен к Интернету, но и когда ещё не было попыток соединения, что делает использование этой функции очень ненадежным для проверки подключения.
Пример использования функции IsInternetConnected в Delphi:
const connect = 'connect.dll'; function IsInternetConnected: HRESULT; external connect name 'IsInternetConnected';stdcall; .... begin if IsInternetConnected=S_OK then ShowMessage('Подключен к Интернет') end;
Следующие функции используются для вызова мастеров создания различных подключений и т.к. все они имеют одни и те же параметры, то я ограничусь описанием параметров только у первой функции. Итак
CreateVPNConnection
Функция вызывает мастера для создания нового VPN-подключения.
Описание функции в Delphi:
function CreateVPNConnection(hwndParent, dwWizardType, dwContextFlags, dwUserFlags, hUserContext: cardinal; pszCommandLine: PWideChar): HRESULT; stdcall; external connect name 'CreateVPNConnection';
Параметры функции:
hwndParent – дескриптор родительского окна;
dwWizardType – определяет стиль мастера подключения. Этот параметр необязательный и может принимать по умолчанию значение 0. Это же значение является и единственным, судя по документации в MSDN.
dwContextFlags – контекстные флаги, определяющие поведение мастера. Значение по умолчанию – 0. Может принимать одно из следующих значений:
0 — мастер возвращает результаты синхронно
1 – мастер возвращает результаты асинхронно, используя для этого события Windows.
dwUserFlags – пользовательские флаги, определенные в приложении. Можно устанавливать значение по умолчанию – 0;
hUserContext – дескриптор потока вызывающего приложения. Можно выставить значение по умолчанию – 0.
pszCommandLine – пользовательские параметры командной строки. Параметр может принимать значение nil или одно из следующих:
-HideFinishPage – скрывает страницу завершения работы мастера;
-SkipInternetDetection – скрыть страницу мастера, показывающую определено ли у пользователя подобное соединение или нет.
-SkipExistingConnections – скрыть страницу мастера, показывающую список, существующих соединения. Этот параметр обычно используется при создании дополнительных подключений.
Пример вызова функции:
if CreateVPNConnected(0,0,0,0,0,nil)=S_Ok then ShowMessage('Мастер вызван успешно');
Результат вызова функции:
GetInternetConnected
Функция запускает мастер подключения к Интернет. Список параметров тот же. что и у предыдущей функции. Результат вызова:
GetNetworkConnected
функция вызывает мастер подключения к локальной сети. Параметры те же. что и у CreateVPNConnection. Результат вызова:
GetVPNConnected
Вызывает мастер создания VPN-подключения. Результат вызова:
Вот пять функций, которые можно использовать для проверки и настройки с Интернет-соединения, создания VPN-подключения и подключения к локальной сети.
Книжная полка
Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
|
||
Название: О чем не пишут в книгах по Delphi
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
|
Для более старых систем есть InternetCheckConnection:
function IsInternetAvailableWindows2000: Boolean;
type
TInternetCheckConnectionFunc = function(lpszUrl: PChar; dwFlags, dwReserved: DWORD): BOOL; stdcall;
const
FLAG_ICC_FORCE_CONNECTION = 1;
var
Lib: HMODULE;
InternetCheckConnection: TInternetCheckConnectionFunc;
begin
Lib := LoadLibrary('wininet.dll');
if Lib = 0 then
begin
Result := False;
Exit;
end;
try
InternetCheckConnection := GetProcAddress(Lib, {$IFDEF UNICODE}'InternetCheckConnectionW'{$ELSE}'InternetCheckConnectionA'{$ENDIF});
if not Assigned(InternetCheckConnection) then
begin
Result := False;
Exit;
end;
Result := InternetCheckConnection('http://www.google.com/', FLAG_ICC_FORCE_CONNECTION, 0);
finally
FreeLibrary(Lib);
end;
end;