Delphi - Internet kapcsolatok tárcsázása programból

forráskód letöltése
Ebben a példában megnézzük, hogy hogyan lehet kilistázni a rendelkezésre álló Internet kapcsolatokat, valamint, hogy hogyan tudjuk a kiválasztott kapcsolatot tárcsázni, a szokásos tárcsázó ablak segítségével. A mellékelt példaprogram nem használható abban az esetben, ha a számítógépen nem rendelkezik beállított VPN kapcsolattal.
A rendelkezésre álló kapcsolatokat a RasEnumEntries függvény segítségével listázhatjuk ki. Ez a függvény a Windows\System32 könyvtárában található, a rasapi32.dll állományban. A DLL-ben RasEnumEntriesA néven szerepel. Az alábbi módon deklarálhatjuk:
function RasEnumEntries (lpszReserved, lpszPhonebook : PChar; pEntryname : PRASENTRYNAME; var cb, cEntries : DWORD) : DWORD;
  stdcall; external 'rasapi32.dll' name 'RasEnumEntriesA';
A RAS jelentése Remote Access, azaz „távoli hozzáférés”. Számítógépünkön az ilyen kapcsolatok a RAS telefonkönyvbe vannak bejegyezve.
RasEnumEntries
function RasEnumEntries (
lpszReserved,
lpszPhonebook : PChar;
pEntryname : PRASENTRYNAME;
var cb,
cEntries : DWORD
) : DWORD;
A RAS telefonkönyv elemeit listázza ki.
Paraméterek
lpszReserved
Itt csak Nil paraméter szerepelhet.
lpszPhonebook : PChar
Ebben a paraméterben kell megadnunk a telefonkönyvet tartalmazó állomány elérési útját és nevét. Ha Nil paramétert adunk meg, akkor az alapértelmezett telefonkönyv kerül használatra.
pEntryname : PRASENTRYNAME
Egy PRasEntryName típusú struktúra, amelybe a lekérdezett lista kerül. Mielőtt meghívnánk a függvényt, a struktúra dwSize tagjának értékül kell adnunk a struktúra méretét. A PRasEntryName struktúra nem szerepel semelyik Delphi unit-ban, deklarációjának módja a mellékelt példaprogramban megtalálható.
var cb
Itt egy változót kell megadnunk, amely tartalmazza a PRasEntryName méretét. Ha a függvény hívásakor a változó tartalma kisebb a szükségesnél, akkor a függvény lefutása sikertelen lesz, de a változóban megkapjuk a szükséges méretet.
cEntries : DWORD
Ebben a paraméterben is egy változót kell megadnunk. A függvény sikeres lefutása esetén ebben a változóban kapjuk vissza a talált bejegyzések számát.
Visszatérési érték
A függvény sikeres lefutása esetén a visszatérési érték 0.
A lekérdezett bejegyzéseket az alábbi ciklus segítségével érhetjük el és dolgozhatjuk fel:
CurrEntry:=pEntryNames;
for i:=0 to Pred(cEntries) do begin
  ListBox1.Items.Add(pEntryNames^.szEntryName);
  Inc(PChar(CurrEntry),SizeOf(TRASEntryName));
end;
A kiválasztott kapcsolat tárcsázását a szokásos ablak segítségével végezzük el. Ehhez egy másik DLL-t kell használnunk, szintén a Windows\System32 könyvtárból. A rasdlg.dll, RasDialDlgA függvényére van szükségünk. A függvényt RasDialDlg néven deklaráljuk az alábbi módon:
function RasDialDlg(lpszPhonebook,lpszEntry,lpszPhoneNumber: PAnsiChar; lpInfo: PRASDIALDLG): Boolean;
  stdcall; external 'rasdlg.dll' name 'RasDialDlgA';
RasDialDlg
function RasDialDlg(
lpszPhonebook,
lpszEntry,
lpszPhoneNumber:PAnsiChar;
lpInfo: PRASDIALDLG
): Boolean;
Egy megadott kapcsolat tárcsázására szolgál. Tárcsázás közben megjelenít egy ablakot, amelyen a tárcsázás állapotát követhetjük nyomon.
Paraméterek
lpszPhonebook
Ebben a paraméterben kell megadnunk a telefonkönyvet tartalmazó állomány elérési útját és nevét. Ha Nil paramétert adunk meg, akkor az alapértelmezett telefonkönyv kerül használatra.
lpszEntry
A bejegyzés neve.
lpszPhoneNumber:PAnsiChar
A tárcsázandó szám. Ha Nil paramétert adunk meg, akkor automatikusan a megadott bejegyzéshez tartozó számot tárcsázza.
lpInfo: PRASDIALDLG
Ebben a paraméterben egy PRASDIALDLG típusú struktúrát kell megadnunk. Mielőtt meghívnánk a függvényt, a struktúra dwSize tagjának értékül kell adnunk a struktúra méretét. Ha a függvény lefutása sikertelen volt, akkor a struktúra dwError tagjában kapjuk vissza a hiba kódját.
Visszatérési érték
Igaz, ha a függvény lefutása sikeresen megtörtént.