Коммутируемый доступ в Интернет через модем по-прежнему остается способом, которым большинство пользователей сети выбирают доступ в Интернет. Если мы сможем включить коммутируемые соединения в наших приложениях (например, функцию автоматического дозвона в программе браузера IE), это, несомненно, будет более удобно для пользователей нашего программного обеспечения (нет необходимости переключать приложения и запускать коммутируемые сети). и повысить удобство нашего программного обеспечения, тем самым повысив конкурентоспособность программного обеспечения.
В WIN9X, если установлена коммутируемая сеть, будут две библиотеки управления коммутируемой сетью, RasApi32.DLL и RasApi16.DLL, в системном каталоге System системы WINDOWS. Мы можем использовать их функции для создания и. изменять коммутируемые соединения и коммутируемый доступ в Интернет с использованием назначенного коммутируемого соединения.
1. Создайте новое коммутируемое соединение.
Когда в системе WIN9X установлено коммутируемое соединение, можно использовать существующее коммутируемое соединение. Если коммутируемое соединение отсутствует, необходимо создать новое коммутируемое соединение. Соответствующая функция предусмотрена в RasAPI, ее имя — RasCreatePhonebookEntryA, а прототип функции:
функция RasCreatePhonebookEntryA (hwnd: THandle;lpszPhonebook: pchar): DWord;
stdcall {находится в разделе интерфейса}
функция RasCreatePhonebookEntryA external 'Rasapi32.dll'; {находится в разделе реализации};
параметр:
hwnd (THandle): дескриптор родительского окна нового окна коммутируемого соединения, который может быть дескриптором TForm или таблицы NIL Windows Desktop (DeskTop);
lpszPhonebook (pchar): имя телефонной книги, не имеет эффекта в Win9X, может быть установлено в пустую строку.
Возвращаемое значение функции:
0 указывает на успешное выполнение; в противном случае это ошибка.
Ниже приведен пример создания нового коммутируемого соединения.
{Создать новое коммутируемое соединение}
PROcedure TForm1.Button1Click(Отправитель: TObject);
вар
dwResult: DWORD;
начинать
//Создаем новое коммутируемое соединение в текущем окне
dwResult:= RasCreatePhonebookEntryA(дескриптор, '');
если dwResult = 0, то
memo1.lines.add('Новое коммутируемое соединение установлено успешно!')
еще
memo1.lines.add('Не удалось установить новое коммутируемое соединение!')
конец;
2. Измените свойства указанного коммутируемого соединения.
Если пользователю необходимо изменить атрибуты коммутируемого соединения, такие как номер телефона, код страны и города, метод подключения, тип сервера и т. д., он может использовать для этого функцию RasAPI. Имя функции — RasEditPhonebookEntryA. прототип функции:
функция RasEditPhonebookEntryA (hwnd: THandle; lpszPhonebook: pchar;
lpszEntryName: pchar ) : DWORD;stdcall {находится в интерфейсной части}
функция RasEditPhonebookEntryA external 'Rasapi32.dll'; {находится в разделе реализации};
параметр:
hwnd (THandle): дескриптор родительского окна нового окна коммутируемого соединения, который может быть дескриптором TForm, выраженным как NIL.
Рабочий стол Windows (Рабочий стол)
lpszPhonebook (pchar): имя телефонной книги, не имеет эффекта в Win9X, может быть установлено в пустую строку.
lpszEntryName: (pchar): имя изменяемого коммутируемого соединения, например «163», «169» и т. д.
Возвращаемое значение функции:
0 указывает на успешное выполнение; в противном случае это ошибка.
Ниже приведен пример изменения свойств указанного коммутируемого соединения.
{Изменить указанные свойства коммутируемого соединения}
процедура TForm1.Button2Click(Отправитель: TObject);
вар
dwResult: DWORD;
стрDialName: строка;
начинать
strDialName := '163';//Установим имя коммутируемого соединения на 163
//Указываем и изменяем свойства коммутируемого соединения в текущем окне
dwResult:= RasEditPhonebookEntryA(дескриптор, '', PChar(strDialName));
если dwResult = 0, то
memo1.lines.add('Изменить коммутируемое соединение' + strDialName + 'Успех!')
еще
memo1.lines.add('Изменить коммутируемое соединение' + strDialName + 'Ошибка!')
конец;
3. Получите имена коммутируемых соединений, доступные в текущей системе.
Чтобы пользователь мог выбрать набор номера с помощью коммутируемого соединения, нам необходимо получить имя коммутируемого соединения, которое установлено в системе. После установки коммутируемого соединения WIN9X записывает имя и атрибуты коммутируемого соединения в реестр. Мы можем получить имена коммутируемого соединения, доступные в текущей системе, и имя соединения по умолчанию, установленное в Internet Explorer, из реестра. .
В разделе HKEY_USERS.DefaultRemoteaccessAddresses реестра перечислены имена коммутируемых подключений, установленных в коммутируемой сети, и их настройки атрибутов. Имя каждого элемента — это имя доступного коммутируемого соединения. каждого элемента — это имя доступного коммутируемого соединения. Нам нужно только прочитать имя каждого проекта, чтобы получить имена коммутируемых соединений, доступные в текущей системе.
Если в Internet Explorer установлено имя подключения по умолчанию (Вид => Свойства обозревателя => Соединение => Соединение => Настройки => Использовать следующее коммутируемое сетевое соединение), то в реестре в разделе HKEY_USERS.DefaultRemoteAccess есть строка введите Значение ключа, имя значения ключа — InternetProfile, а его значение — имя подключения по умолчанию, установленное в Internet Explorer.
Ниже приведен пример получения имен коммутируемых соединений, доступных в текущей системе.
{Обратите внимание, что раздел «Реестр» добавлен в список «Использует для работы с реестром»}
{Получить имена коммутируемых соединений, доступные в текущей системе}
процедура TForm1.Button3Click(Отправитель: TObject);
вар
реестрТемп: TRegistry;
stringsTemp: TStringlist;
intIndex: целое число;
начинать
реестрТемп:= TRegistry.Create;
stringsTemp := TStringlist.Create;
с реестром Temp сделать
начинать
RootKey := HKEY_USERS;//Корневой ключ установлен в HKEY_USERS
//Если есть подразделы.DefaultRemoteAccessAddresses
если OpenKey('.DefaultRemoteAccessAddresses', false), то
GetValueNames( stringsTemp );//Считаем имя каждого элемента, то есть имя коммутируемого соединения
ЗакрытьКлюч;
конец;
//Коммутируемые соединения, доступные в текущей системе
memo1.lines.add( '******************В текущей системе есть'+ IntToStr( stringsTemp.count )
+'Доступные коммутируемые соединения следующие******************');
для intIndex:= от 0 до stringsTemp.count - 1 делать
memo1.lines.add(stringsTemp.strings[intIndex]);
//Перечислить имена подключений по умолчанию, установленные в Internet Explorer
если реестрTemp.OpenKey('.DefaultRemoteAccess', false), то
memo1.lines.add( 'Имя подключения по умолчанию, установленное в Internet Explorer:' +
реестрTemp.ReadString('InternetProfile') );
//освобождаем память
реестрTemp.free;
строкиТемп.свободно;
конец;
4. Наберите номер, используя указанное коммутируемое соединение.
Целью трех вышеуказанных задач является коммутируемый доступ в Интернет. Теперь давайте посмотрим, как использовать назначенное коммутируемое соединение для коммутируемого доступа в Интернет. Лучше всего вызвать службу коммутируемой сети WIN9X, то есть запустить готовую программу под WIN9X.
В программе Delphi вы можете использовать следующий код для реализации коммутируемого доступа в Интернет:
Winexec('rundll32.exe rnaui.dll,RnaDial 163',SW_SHOWNORMAL);
Последний параметр «163» в строке — это имя коммутируемого соединения.
Ниже приведен пример коммутируемого доступа в Интернет с использованием указанного коммутируемого соединения.
{Коммутируемый доступ в Интернет с использованием указанного коммутируемого соединения}
процедура TForm1.Button4Click(Отправитель: TObject);
вар
стрDialName: строка;
начинать
strDialName := '163';//Установим имя коммутируемого соединения на 163
memo1.lines.add( '******************Использовать коммутируемое соединение' + strDialName
+'Реализовать коммутируемый доступ в Интернет******************');
Winexec( PChar('rundll32.exe rnaui.dll,RnaDial ' + strDialName),SW_SHOWNORMAL);
конец;
Вышеуказанная программа была отлажена и передана под PWIN98+Delphi3.0.