Przeklejam tu swój niedawny post z innego forum (kod dla BCB, ale oparty na "czystym" API):
"Jeśli zaś chcesz szukać w ogóle możliwych do wykorzystania połączeń, to użyj RasEnumEntries. Jak poniżej - tam dodatkowo użyłem funkcji RasDialDlg: ona pozwala ustanowić połączenie (ale nie bezpośrednio, jak bodaj RasDial, ale przez dialogi).
Dołącz "ras.h" i "rasdlg.h".
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//wyszuka dostępne do użycia połączenia:
RASENTRYNAME tablica[5];
tablica[0].dwSize = sizeof(RASENTRYNAME); //trzeba ustawić
unsigned long rozmiar = sizeof(tablica);
LPDWORD lp_rozmiar = &rozmiar;
unsigned long ilosc = 0; //ilość połączeń
LPDWORD lp_ilosc = &ilosc;
RasEnumEntries(NULL, NULL, tablica, lp_rozmiar, lp_ilosc);
ShowMessage(IntToStr(ilosc));
if (ilosc > 0) {
//spróbuje się połączyć (przez dialog!)
ShowMessage(tablica[0].szEntryName);
RASDIALDLG dialog;
dialog.dwSize = sizeof(RASDIALDLG);
dialog.hwndOwner = Handle;
dialog.dwSubEntry = 0;
dialog.reserved = 0;
dialog.reserved2 = 0;
int rezultat = RasDialDlg(NULL, tablica[0].szEntryName, NULL, &dialog);
if (rezultat == 0)
Application->MessageBox("Nie udało się ustanowić połączenia.", "Błąd", MB_OK);
else
Application->MessageBox("Ustanowiono połączenie", "", MB_OK);
};
}"
Myślę, że powinno cię to urządzać. I na pewno działa pod XP (pod niczym innym tego nie próbowałem).