Beberapa waktu yang lalu, saya menulis kelas untuk memutar jendela karena kebutuhan pekerjaan. Sekarang mendukung membaca daftar koneksi dial-up Windows, panggilan, menggantung, membuat/menghapus koneksi, dan dapat digunakan untuk 98/2000/xp. Di masa depan, jika Anda punya waktu, tulislah sebagai komponen dan tambahkan dukungan untuk acara panggilan.
penggunaan
Ras, kelas, sysutils, strutils, windows, formulir;
jenis
ERASERROR = Exception;
jenis
Trasconnection = kelas
Pribadi
Fplatform: integer;
FConnected: Boolean;
Frasentries: TStringList;
Frasconn: Hrasconn;
FParams: rasdialparams;
Ferrno: integer;
fungsi getPassword: string;
Prosedur SetPassword (kata sandi: string);
fungsi getphoneno: string;
Prosedur SetPhoneno (Nomor: String);
function getCallback: string;
prosedur setCallback (angka: string);
fungsi getDomain: string;
Prosedur setDomain (domain: string);
fungsi getusername: string;
Prosedur setUsername (nama pengguna: string);
function getEntryname: string;
Prosedur setEntryname (entri: string);
Fungsi GetConnected: Boolean;
Prosedur SetConnected (Avalue: Boolean);
fungsi getRasentries: tStringList;
publik
Properti Rasentries: TStringList membaca getRasentries;
Properti Phonenumber: String baca getphoneno menulis setphoneno;
Properti CallbackNumber: String baca getCallback menulis setCallback;
domain properti: string baca getDomain write setDomain;
Properti entriName: string baca getEntryname Tulis setEntrryName;
Nama Pengguna Properti: String Baca getUsername Tulis setusername;
kata sandi properti: string baca getPassword tulis setPassword;
Properti Aktif: Boolean Read GetConnected Write SetConnected;
Prosedur terhubung;
Prosedur Putus;
function getErrorCode: integer;
Prosedur FreeAndhangup;
konstruktor membuat;
Destructor menghancurkan;
Prosedur CreaterAsentry;
Prosedur DeleterAsEntry (aEntryname: string);
// fungsi geterrorreason: integer;
akhir;
Pelaksanaan
{Trasconnection}
prosedur trasconnection.connect;
var
I: Integer;
s: string;
Mulai
Fparams.dwsize: = sizeof (rasdialparams);
i: = rasdial (nil, nil, @fparams, 0, nil, @frasconn);
Jika saya <> 0 lalu mulai
Ferrno: = i;
Kasus I dari
691: S: = 'Verifikasi Identitas Gagal!';
692: S: = 'Pembukaan port gagal!';
676: S: = 'Barisnya sibuk, harap tunggu dan panggil lagi!';
677: s: = 'kesalahan respons suara!';
678: s: = 'tidak ada jawaban!';
679: s: = 'tidak ada sinyal operator!';
680: S: = 'No Dial Tone!';
kalau tidak
S: = 'Kesalahan Tidak Diketahui!';
akhir;
Rashangup (Frasconn);
Naikkan eraserror.create (s);
akhir
lain Fconnected: = true;
akhir;
prosedur trasconnection.disconnect;
Mulai
Rashangup (Frasconn);
Frasconn: = 0;
akhir;
fungsi trasconnection.getCallback: string;
Mulai
Hasil: = String (fParams.szcallbackNumber);
akhir;
fungsi trasconnection.getConnected: boolean;
var
i, len, num: integer;
X: Array Rasconn;
Mulai
Hasil: = false;
SetLength (x, 1);
x [0] .dwsize: = sizeof (rasconn);
len: = x [0] .dwsize;
num: = 0;
RasenumConnections (@x [0], @len, @num);
Jika num> 0 maka mulailah
SetLength (x, num);
x [0] .dwsize: = sizeof (rasconn);
len: = x [0] .dwsize;
RasenumConnections (@x [0], @len, @num);
untuk i: = 1 ke num lakukan
Jika strCComp (x [i - 1] .szentryname, pchar (entryname)) = 0 lalu mulai
Frasconn: = x [i - 1] .hrasconn;
Hasil: = true;
Merusak;
akhir;
akhir;
SetLength (x, 0);
akhir;
fungsi trasconnection.getDomain: string;
Mulai
Hasil: = string (fParams.szdomain);
akhir;
fungsi trasconnection.getErrorCode: integer;
Mulai
Hasil: = ferrno;
akhir;
fungsi trasconnection.getPassword: string;
Mulai
Hasil: = '*********';
akhir;
fungsi trasconnection.getphoneno: string;
Mulai
Hasil: = String (fParams.szphonenumber);
akhir;
fungsi trasconnection.getEntryname: string;
Mulai
Hasil: = string (fParams.szentryname);
akhir;
function trasconnection.getusername: string;
Mulai
Hasil: = String (fParams.szusername);
akhir;
Prosedur trasconnection.setCallback (angka: string);
Mulai
Strlcopy (fparams.szcallbacknumber, pchar (angka), sizeof (fparams.szcallbacknumber) - 1);
akhir;
prosedur trasconnection.setConnected (avalue: boolean);
Mulai
Jika Avalue dan tidak terhubung, lalu sambungkan
selain itu jika tidak memberi nilai dan terhubung kemudian putuskan sambungan;
akhir;
prosedur trasconnection.setDomain (domain: string);
Mulai
Strlcopy (fparams.szdomain, pchar (domain), sizeof (fparams.szdomain) - 1);
akhir;
Prosedur trasconnection.setpassword (kata sandi: string);
Mulai
Strlcopy (fparams.szpassword, pchar (kata sandi), sizeof (fparams.szpassword) - 1);
akhir;
Prosedur trasconnection.setphoneno (angka: string);
Mulai
Strlcopy (fparams.szphonenumber, pchar (angka), sizeof (fparams.szphonenumber) - 1);
akhir;
prosedur trasconnection.setentryname (entri: string);
var
I: Integer;
Mulai
untuk i: = 0 ke frasentries.count - 1 do
Jika frasentries.strings [i] = entri lalu mulailah
Strcopy (fparams.szentryname, pchar (entri));
KELUAR;
akhir;
Strcopy (fparams.szentryname, '');
akhir;
prosedur trasconnection.setusername (nama pengguna: string);
Mulai
Strlcopy (fparams.szusername, pchar (nama pengguna), sizeof (fparams.szusername) - 1);
akhir;
prosedur trasconnection.freeandhangup;
Mulai
Jika aktif maka putuskan sambungan;
Bebas;
akhir;
fungsi trasconnection.getrasentries: tStringlist;
var
ren: array rasentryname;
ren98: array rasentryname98;
C, L: Integer;
Mulai
Frasentries.clear;
C: = 0;
kasus flatform dari
Ver_platform_win32_windows:
Mulai
setLength (ren98, 1);
ren98 [0] .dwsize: = sizeof (rasentryname98);
l: = sizeof (rasentryname98);
jika rasenumentries (nil, nil, @ren98 [0], @l, @c) = error_buffer_too_small lalu mulai
setLength (ren, c);
Rasenumentries (nil, nil, @ren98 [0], @l, @c);
akhir;
Sedangkan C> 0 Mulai
Frasentries.add (string (ren98 [c - 1] .szentryname));
Dec (c);
akhir;
SetLength (ren98, 0);
akhir;
Ver_platform_win32_nt:
Mulai
setLength (ren, 1);
ren [0] .dwsize: = sizeof (rasentryname);
l: = sizeof (rasentryname);
jika rasenumentries (nil, nil, @ren [0], @l, @c) = error_buffer_too_small lalu mulai
setLength (ren, c);
Rasenumentries (nil, nil, @ren [0], @l, @c);
akhir;
Sedangkan C> 0 Mulai
Frasentries.add (string (ren [c - 1] .szentryname));
Dec (c);
akhir;
SetLength (ren, 0);
akhir;
akhir;
jika frasentries.count> 0 lalu entriName: = frasentries.strings [0];
Hasil: = frasentries;
akhir;
konstruktor trasconnection.create;
var
OS: osversioninfoa;
Mulai
diwariskan;
Os.dwosversioninfosize: = sizeof (osversioninfoa);
GetVersionex (OS);
Fplatform: = os.dwplatformId;
Frasentries: = tStringlist.create;
GetRasentries;
akhir;
Destructor trasconnection.destroy;
Mulai
Frasentries. Bebas;
diwariskan;
akhir;
prosedur trasconnection.creatersentry;
Mulai
RascreatePhoneBookEntry (application.handle, nil);
akhir;
prosedur trasconnection.deleterAsentry (aentryname: string);
var
I: Integer;
Mulai
i: = frasentries.indexof (aEntryname);
Jika i = -1 maka keluar;
Frasentries.delete (i);
jika aentryname = entryname lalu
Jika frasentries.count> 0 lalu entriName: = frasentries.strings [0]
Lain entryname: = '';
RasdeleteEntry (nil, pchar (aentryname));
akhir;
Pernyataan API:
fungsi rasdial (
lprasdialextensions: prasdialextensions;
LPSZPhoneBook: LPCTSTR;
lprasdialparams: lprasdialparams;
dwnotifierType: dword;
lpvnotifier: pointer;
lphrasconn: lphrasconn): dword;
stdcall;
fungsi rashangup (rasconn: hrasconn): dword;
stdcall;
fungsi rasgetentrydialparams (
LPSZPhoneBook: LPCTSTR;
lprasdialparams: lprasdialparams;
lpfpassword: lpbool): dword;
stdcall;
fungsi rasenumentries (
Dicadangkan: LPCTSTR;
LPSZPhoneBook: LPCTSTR;
lprasentryname: lprasentryname;
LPCB: LPDWord;
LPCentries: LPDWord): DWORD;
stdcall;
fungsi raseditphoneBookEntry (
hwnd: hwnd;
LPSZPhoneBook: LPCTSTR;
lpszentryname: LPCTSTR): DWORD;
stdcall;
fungsi rasgetentryproperties (
LPSZPhoneBook: LPCTSTR;
LPSZENTRY: LPCTSTR;
lPrasentry: lPrasentry;
lpdwentryinfosize: lpdword;
lpbdeviceInfo: pbyte;
LPDWDEVICINFOSIZE: LPDWord): DWORD;
stdcall;
fungsi rassetentryproperties (
LPSZPhoneBook: LPCTSTR;
LPSZENTRY: LPCTSTR;
lPrasentry: lPrasentry;
Dwentryinfosize: DWORD;
lpbdeviceInfo: pbyte;
dwdeviceInfosize: DWORD): DWORD;
stdcall;
fungsi rasenumConnections (
LPRASCONN: LPRASCONN;
LPCB: LPDWord;
LPCConnections: LPDWord): DWORD;
stdcall;
fungsi rasenumdevices (
lprasdevinfo: lprasdevinfo;
LPCB: LPDWord;
lpcdevices: lpdword): dword;
stdcall;
fungsi rascreatePhoneBookEntry (
Pegangan: HWND;
stdcall;
fungsi rasdeleteEntry (
LPSZPhoneBook: PCHAR;
LPSZENTRY: PCHAR): DWORD;
stdcall;