С быстрым развитием Интернета программирование теперь часто требует прямого подключения к сети в программе для решения некоторых вопросов, таких как онлайн-регистрация и онлайн-помощь, что требует от нас установления определенных соединений в программе. Многие программы запускают браузер для поиска URL-адреса, не зная, подключен ли пользователь к Интернету. После долгих усилий они могут найти только страницу с ошибкой (конечно, хорошего результата нет). Если мы сможем автоматически определить, подключен ли пользователь к Интернету при написании программы, и если да, то открыть соединение, а если нет, запустить коммутируемое соединение по умолчанию, заставит ли это людей почувствовать, что ваше программное обеспечение лучше других ? Определение подключения к Интернету описано во многих местах. Здесь мы только рассказываем, как запустить коммутируемое соединение по умолчанию.
----Перед введением давайте сначала посмотрим, как открыть коммутируемую сеть. Поскольку удаленный доступ к сети не является исполняемым файлом, его нельзя открыть с помощью метода «Исполняемый файл оболочки». Чтобы запустить коммутируемую сеть, вам необходимо использовать Проводник. Способ следующий:
Shell"Explorer::{20D04FE0-3AEA-1069-A2D8-08002B30309D}/"&"::{992CFFA0-F557-101A-88EC-00DD010CCC48}",vbNormalFocus
----Но если вы хотите запустить соединение в коммутируемой сети, вам нужно использовать для его запуска rundll.exe и rnaui.dll. Способ следующий (при условии, что имя соединения 163):
Оболочка "rundllrnaui.dll,RnaDial163",vbNormalFocus
----Примечание. В приведенном выше описании не вставляйте лишние пробелы в часть «,RnaDial163» и не меняйте регистр произвольно.
----Вышеупомянутое предполагает только имя соединения, но в реальном программировании мы не знаем его имени. Как получить имя соединения по умолчанию и запустить его? Здесь мы можем использовать реестр для достижения нашей цели. Полная процедура выглядит следующим образом:
----Поместите командную кнопку (с именем cmdCallConnect) в форму. Ниже приведена часть кода:
OptionExplicit
'Заявление API о регистрации
PRivateDeclareFunctionRegOpenKeyExLib"advapi32"Alias"RegOpenKeyExA"(ByValhKeyAsLong,ByVallpSubKeyAsString,ByValulOptionsAsLong,ByValsamDesiredAsLong,phkResultAsLong)AsLong
PrivateDeclareFunctionRegQueryValueExLib"advapi32"Alias"RegQueryValueExA"(ByValhKeyAsLong,ByVallpValueNameAsString,ByVallpReservedAsLong,ByReflpTypeAsLong,ByValszDataAsString,ByReflpcbDataAsLong)AsLong
PrivateDeclareFunctionRegCloseKeyLib"advapi32"(ByValhKeyAsLong)AsLong
'постоянный
ConstHKEY_CURRENT_USER=&H80000001
ConstERROR_SUCCESS=0&
PrivateSubcmdCallConnect_Click()
'Запускаем коммутируемое соединение по умолчанию
Оболочка «rundllrnaui.dll, RnaDial» GetConnect, vbNormalFocus
EndSub
PublicFunctionGetConnect()AsString
DimhKeyAsLong
DimSubKeyAsString
hKey=HKEY_CURRENT_USER’первичный ключ
SubKey="Подключ удаленного доступа"
'Получаем имя соединения по умолчанию
GetConnect=GetRegValue(hKey,SubKey,"По умолчанию")
Конечнаяфункция
PublicFunctionGetRegValue(hKeyAsLong,lpszSubKeyAsString,szKeyAsString)AsVariant
ОнErrorGoToErrorRoutineErr:
ДимфкРезультатАсЛонг
Димлрезультатаслонг
DimszBufferAsString
DimlBuffSizeAsLong
'Создать буфер
szBuffer=Пробел(255)
lBuffSize=Len(szBuffer)
'Открываем регистрационный ключ
RegOpenKeyExhKey, lpszSubKey, 0,1, phkResult
'Результаты запроса
lResult=RegQueryValueEx(phkResult,szKey,0,0,szBuffer,lBuffSize)
'Закрыть регистрационный ключ
RegCloseKeyphkResult
'возвращаем результат
IflResult=ERROR_SUCCESSThen
GetRegValue=Влево(szBuffer,lBuffSize-1)
Еще
ПолучитьRegValue=""
КонецЕсли
ВыходФункция
ОшибкаРутинЕрр:
ПолучитьRegValue=""
Конечнаяфункция
Вышеуказанная программа отлажена под WIN98 и VB6.0. ->