Необходимо создать проект 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 может быть разным.