Шаг 1 - Проверка соединения

Создание проекта

Необходимо создать проект Win32 и лучше его назвать RAS. А вообще как хотите. Функции по работе с RAS находятся в динамической библиотеке rasapi32.dll и соответственно в проект необходимо добавить rasapi32.lib. Как это сделать? Добраться до установки библиотек можно с помощь Project Setting - Link - Object library module. Обязательно добавьте во все конфигурации, а не в Debug или Relase дабы не очень удивляться в будущем.

Создаем код

#include "windows.h"
#include "ras.h"
#include "iostream.h"
#include "conio.h"

void main()
{
	RASCONN ras[20];
	DWORD dSize,dNumber;
	ras[0].dwSize = sizeof(RASCONN); 
	dSize = sizeof( ras ); 
	if( RasEnumConnections( ras, &dSize, &dNumber ) == 0 )
	{
		cout <<  "Count Ras " <<  dNumber <<  endl;
		for (DWORD x=0; x < dNumber;x++) cout <<  ras[x].szEntryName <<  endl;
	}
	getch();
}

Описание

RAS - Remote Access Service. Позволяет удаленно подключаться к сетям с использованием удаленного соединения (модем). Именно так я попадаю в Интернет. Запускаю удаленный доступ. Он звонит и входит в сеть.

Мы объявили подключение windows.h для того, чтобы пользоваться типами переменных Windows, например тип DWORD там описан. Подключили ras.h для доступа к описанию функций. iostream.h просто объявление потоков для вывода на экран. Мне удобно, хотя можно и подругому, например stdio.h - printf, но мне так удобнее. Conio.h для функции getch(), она задерживает выполнение программы до нажатия клавиши.

Итак, первым делом мы объявляем массив типа RASCONN из 20 элементов. Почему 20 ? Мне так хочется. Вообще можно сколько угодно. Но на компьютере обычно модем один и соединение одно. Так что больше 2 нужно точно. Почему больше 2 ? В конце при проверке программы увидите ! Эта структура содержит информацию о соединении. Вот так она описана:

typedef struct _RASCONN { 
	DWORD     dwSize;     
	HRASCONN  hrasconn; 
	TCHAR     szEntryName[RAS_MaxEntryName + 1];  
#if (WINVER >= 0x400) 
	CHAR      szDeviceType[ RAS_MaxDeviceType + 1 ]; 
	CHAR      szDeviceName[ RAS_MaxDeviceName + 1 ]; 
#endif  
} RASCONN ; 

Дальше мы объявили две переменные. Они нам понадобятся. Потом в первый элемент структуры в поле dwSize мы поместили размер 1 записи из массива структур, т.е. размер одной структуры. Зачем ? Посмотрите описание структуры, при разных версиях, размер разный. Функция sizeof() как раз этот размер и вычислила. И весь размер массива вычислили. Нужен он дальше.

RasEnumConnections проверяет наличие соединения. Результат у нее как раз не количество соединений, а успешность обращения к динамической библиотеке. Ведь её может не быть или она может быть испорчена. В эту функцию мы передаем массив ras, указатель на размер массива. И указатель на число куда вернется количество соединений. Почему указатель, потому что это будет использовано для возврата результата. Как иначе, если функция возврашает успешность своего вызова?

Если функция выполнена, то в dNumber будет записано количество соединений. Если соединения есть, то в массив вернется о них информация. С помощью for мы пробегаем по массиву и выводим информацию.

А теперь соберите и запустите программу. Если у Вас нет соединения, то на экране появится 0 и будет ждать нажатия клавиши. А теперь запустите соединение. В момент проверки пароля для входа в систему можете запустить программу. Она покажет вам 1 и имя соединения, которое описано в DialUp.

И последнее. Как проверить два соединения с одним модемом. Сделайте соединение с альтернативным именем, чтобы их было два. Запустите с первым именем. После связи. Запустите со вторым. Вот второе и не запустится. Вам сообщат о том, что модем используется - ошибка 6... В этот момент запустите Вашу программу и она покажет два соединения с именами.

Шпаргалка

Подключите обращение к динамической библиотеке asapi32.lib.

Включите описание функций RAS:

#include "ras.h"

Создавайте код. RasEnumConnections - говорит только о том выполнилась она или нет. И помните размер структуры RASCONN может быть разным.


Следующий Шаг | Оглавление
Автор Каев Артем - 17.09.99