เมื่อไม่นานมานี้ฉันเขียนชั้นเรียนเพื่อโทรออกเนื่องจากความต้องการในการทำงาน ตอนนี้รองรับการอ่านรายการการเชื่อมต่อการหมุนเวียนของ Windows, Dialing, Hanging up, การสร้าง/ลบการเชื่อมต่อและสามารถใช้สำหรับ 98/2543/xp ในอนาคตหากคุณมีเวลาเขียนเป็นองค์ประกอบและเพิ่มการสนับสนุนสำหรับการโทรหาเหตุการณ์
ใช้
Ras, คลาส, sysutils, strutils, windows, รูปแบบ;
พิมพ์
ERASERROR = ข้อยกเว้น;
พิมพ์
trasconnection = คลาส
ส่วนตัว
fplatform: จำนวนเต็ม;
fconnected: บูลีน;
Frasentries: TSTRINGLIST;
Frasconn: Hrasconn;
FPARAMS: rasdialparams;
Ferrno: จำนวนเต็ม;
ฟังก์ชั่น getPassword: สตริง;
ขั้นตอน setPassword (รหัสผ่าน: สตริง);
ฟังก์ชั่น getphoneno: สตริง;
ขั้นตอน setphoneno (หมายเลข: สตริง);
ฟังก์ชั่น getCallback: สตริง;
ขั้นตอน setCallback (หมายเลข: สตริง);
ฟังก์ชั่น getDomain: สตริง;
ขั้นตอน setDomain (โดเมน: สตริง);
ฟังก์ชั่น getUserName: สตริง;
ขั้นตอน setUserName (ชื่อผู้ใช้: สตริง);
ฟังก์ชั่น getentryName: สตริง;
ขั้นตอน setEntryName (รายการ: สตริง);
ฟังก์ชั่น getConnected: บูลีน;
ขั้นตอน setConnected (Avalue: บูลีน);
ฟังก์ชั่น getRasentries: TSTRINGLIST;
สาธารณะ
Property Rasentries: TSTRINGLIST อ่าน getRasentries;
Property Phonenumber: สตริงอ่าน getphoneno เขียน setphoneno;
Property CallBackNumber: String read getCallback เขียน setCallback;
โดเมนคุณสมบัติ: สตริงอ่าน getDomain เขียน setDomain;
Property EntryName: String read getEntryName เขียน setEntryName;
ชื่อผู้ใช้คุณสมบัติ: สตริงอ่าน getUserName เขียน setUserName;
รหัสผ่านคุณสมบัติ: สตริงอ่าน getPassword setpassword;
คุณสมบัติที่ใช้งานอยู่: บูลีนอ่าน getConnected write setConnected;
ขั้นตอนการเชื่อมต่อ;
ขั้นตอนการตัดการเชื่อมต่อ;
ฟังก์ชั่น geterRorCode: จำนวนเต็ม;
ขั้นตอน Freeandhangup;
ตัวสร้างสร้าง;
Destructor ทำลาย;
ขั้นตอน createrasentry;
ขั้นตอน deleterasentry (aentryName: String);
// ฟังก์ชั่น geterRorrorrorason: จำนวนเต็ม;
จบ;
การดำเนินการ
{trasconnection}
ขั้นตอน trasconnection.connect;
วาจา
ฉัน: จำนวนเต็ม;
S: String;
เริ่ม
fparams.dwsize: = sizeof (rasdialparams);
i: = rasdial (ไม่มี, nil, @fparams, 0, nil, @frasconn);
ถ้าฉัน <> 0 แล้วเริ่มต้น
ferrno: = i;
กรณีที่ฉันของ
691: S: = 'การตรวจสอบตัวตนล้มเหลว!';
692: S: = 'การเปิดพอร์ตล้มเหลว!';
676: S: = 'สายไม่ว่างโปรดรอและโทรอีกครั้ง!';
677: S: = 'ข้อผิดพลาดในการตอบกลับด้วยเสียง!';
678: S: = 'ไม่มีคำตอบ!';
679: S: = 'ไม่มีสัญญาณผู้ให้บริการ!';
680: S: = 'No Dial Tone!';
อื่น
S: = 'ข้อผิดพลาดที่ไม่รู้จัก!';
จบ;
Rashangup (Frasconn);
เพิ่ม eraserror.create (s);
จบ
อื่น ๆ fconnected: = true;
จบ;
ขั้นตอน trasconnection.disconnect;
เริ่ม
Rashangup (Frasconn);
frasconn: = 0;
จบ;
ฟังก์ชั่น trasconnection.getCallback: String;
เริ่ม
ผลลัพธ์: = สตริง (fparams.szcallbacknumber);
จบ;
ฟังก์ชั่น trasconnection.getConnected: บูลีน;
วาจา
ฉัน, เลน, NUM: จำนวนเต็ม;
X: อาร์เรย์ของ Rasconn;
เริ่ม
ผลลัพธ์: = เท็จ;
setLength (x, 1);
x [0] .dwsize: = sizeof (rasconn);
LEN: = X [0] .DWSIZE;
num: = 0;
RasenumConnections (@x [0], @len, @Num);
ถ้า num> 0 แล้วเริ่มต้น
setLength (x, num);
x [0] .dwsize: = sizeof (rasconn);
LEN: = X [0] .DWSIZE;
RasenumConnections (@x [0], @len, @Num);
สำหรับ i: = 1 ถึง num do
ถ้า strComp (x [i - 1] .szentryName, pchar (entryName)) = 0 แล้วเริ่มต้น
frasconn: = x [i - 1] .hrasconn;
ผลลัพธ์: = จริง;
หยุดพัก;
จบ;
จบ;
setLength (x, 0);
จบ;
ฟังก์ชั่น trasconnection.getDomain: String;
เริ่ม
ผลลัพธ์: = สตริง (fparams.szdomain);
จบ;
ฟังก์ชั่น trasconnection.geterrorCode: จำนวนเต็ม;
เริ่ม
ผลลัพธ์: = ferrno;
จบ;
function trasconnection.getPassword: String;
เริ่ม
ผลลัพธ์: = '*********';
จบ;
ฟังก์ชั่น trasconnection.getphoneno: String;
เริ่ม
ผลลัพธ์: = สตริง (fparams.szphonenumber);
จบ;
function trasconnection.getentryName: String;
เริ่ม
ผลลัพธ์: = สตริง (fparams.szentryname);
จบ;
function trasconnection.getUserName: String;
เริ่ม
ผลลัพธ์: = สตริง (fparams.szusername);
จบ;
ขั้นตอน trasconnection.setCallback (หมายเลข: สตริง);
เริ่ม
strlcopy (fparams.szcallbacknumber, pchar (หมายเลข), sizeof (fparams.szcallbacknumber) - 1);
จบ;
ขั้นตอน trasconnection.setConnected (Avalue: บูลีน);
เริ่ม
หาก Avalue และไม่ได้รับการเชื่อมต่อแล้วเชื่อมต่อ
อื่นถ้าไม่ใช่ Avalue และ getConnected แล้วตัดการเชื่อมต่อ;
จบ;
ขั้นตอน trasconnection.setDomain (โดเมน: สตริง);
เริ่ม
strlcopy (fparams.szdomain, pchar (โดเมน), sizeof (fparams.szdomain) - 1);
จบ;
ขั้นตอน trasconnection.setPassword (รหัสผ่าน: สตริง);
เริ่ม
strlcopy (fparams.szpassword, pchar (รหัสผ่าน), sizeof (fparams.szpassword) - 1);
จบ;
ขั้นตอน trasconnection.setphoneno (หมายเลข: สตริง);
เริ่ม
strlcopy (fparams.szphonenumber, pchar (จำนวน), sizeof (fparams.szphonenumber) - 1);
จบ;
ขั้นตอน trasconnection.setentryName (รายการ: สตริง);
วาจา
ฉัน: จำนวนเต็ม;
เริ่ม
สำหรับ i: = 0 ถึง frasentries.count - 1 ทำ
ถ้า frasentries.strings [i] = รายการแล้วเริ่มต้น
strcopy (fparams.szentryname, pchar (รายการ));
ออก;
จบ;
strcopy (fparams.szentryname, '');
จบ;
ขั้นตอน trasconnection.setUserName (ชื่อผู้ใช้: String);
เริ่ม
strlcopy (fparams.szusername, pchar (ชื่อผู้ใช้), sizeof (fparams.szusername) - 1);
จบ;
ขั้นตอน trasconnection.freeandhangup;
เริ่ม
หากใช้งานแล้วถอดการเชื่อมต่อ;
ฟรี;
จบ;
ฟังก์ชั่น trasconnection.getRasentries: TSTRINGLIST;
วาจา
Ren: Array of RasentryName;
REN98: อาร์เรย์ของ RasentryName98;
C, L: จำนวนเต็ม;
เริ่ม
frasentries.clear;
C: = 0;
กรณี fplatform ของ
ver_platform_win32_windows:
เริ่ม
SetLength (Ren98, 1);
Ren98 [0] .dwsize: = sizeof (rasentryName98);
l: = sizeof (rasentryName98);
ถ้า rasenumentries (ไม่มี, nil, @ren98 [0], @l, @c) = error_buffer_too_small แล้วเริ่มต้น
setLength (ren, c);
Rasenumentries (Nil, Nil, @Ren98 [0], @L, @C);
จบ;
ในขณะที่ c> 0 เริ่มต้น
frasentries.add (String (ren98 [c - 1] .szentryname));
ธ.ค. (C);
จบ;
SetLength (Ren98, 0);
จบ;
ver_platform_win32_nt:
เริ่ม
setLength (ren, 1);
ren [0] .dwsize: = sizeof (rasentryname);
l: = sizeof (rasentryName);
ถ้า rasenumentries (ไม่มี, nil, @ren [0], @l, @c) = error_buffer_too_small แล้วเริ่มต้น
setLength (ren, c);
Rasenumentries (ไม่มี, nil, @ren [0], @l, @c);
จบ;
ในขณะที่ c> 0 เริ่มต้น
frasentries.add (สตริง (ren [c - 1] .szentryname));
ธ.ค. (C);
จบ;
setLength (ren, 0);
จบ;
จบ;
ถ้า frasentries.count> 0 แล้ว entryName: = frasentries.strings [0];
ผลลัพธ์: = frasentries;
จบ;
ตัวสร้าง trasconnection.create;
วาจา
OS: OsversionInfoa;
เริ่ม
สืบทอด;
OS.DWOSVERSIONINFOSIZE: = sizeof (OsversionInfoa);
GetVersionex (OS);
fplatform: = os.dwplatformid;
frasentries: = tstringlist.create;
Getrasentries;
จบ;
destructor trasconnection.destroy;
เริ่ม
frasentries.free;
สืบทอด;
จบ;
ขั้นตอน trasconnection.createrasentry;
เริ่ม
rascreatephonebookentry (application.handle, nil);
จบ;
ขั้นตอน trasconnection.deleterasentry (AENTRYNAME: String);
วาจา
ฉัน: จำนวนเต็ม;
เริ่ม
i: = frasentries.indexof (aentryname);
ถ้าฉัน = -1 แล้วออก;
frasentries.delete (i);
ถ้า aentryName = entryName แล้ว
ถ้า frasentries.count> 0 แล้ว entryName: = frasentries.strings [0]
else entryName: = '';
rasdeleteentry (nil, pchar (aentryname));
จบ;
คำสั่ง API:
ฟังก์ชั่น rasdial (
LPRASDIALEXTENSIONS: PRASDIALEXTENSIONS;
lpszphonebook: lpctstr;
lprasdialparams: lprasdialparams;
dwnotifiertype: dword;
lpvnotifier: ตัวชี้;
lphrasconn: lphrasconn): dword;
stdcall;
ฟังก์ชั่น Rashangup (Rasconn: Hrasconn): DWORD;
stdcall;
ฟังก์ชั่น rasgetentrydialparams (
lpszphonebook: lpctstr;
lprasdialparams: lprasdialparams;
LPFPassword: LPBool): DWORD;
stdcall;
ฟังก์ชั่น rasenumentries (
สงวนไว้: LPCTSTR;
lpszphonebook: lpctstr;
lprasentryName: lprasentryName;
LPCB: LPDWORD;
lpcentries: lpdword): dword;
stdcall;
ฟังก์ชั่น raseditphonebookentry (
hwnd: hwnd;
lpszphonebook: lpctstr;
lpszentryName: lpctstr): dword;
stdcall;
ฟังก์ชั่น rasgetentryproperties (
lpszphonebook: lpctstr;
lpszentry: lpctstr;
lprasentry: lprasentry;
lpdwentryinfosize: lpdword;
lpbdeviceinfo: pbyte;
LPDWDEVICEINFOSIZE: LPDWORD): DWORD;
stdcall;
ฟังก์ชั่น rassetentryproperties (
lpszphonebook: lpctstr;
lpszentry: lpctstr;
lprasentry: lprasentry;
DWENTRYINFOSIZE: DWORD;
lpbdeviceinfo: pbyte;
dwdeviceinfosize: dword): dword;
stdcall;
ฟังก์ชั่น rasenumconnections (
LPRASCONN: LPRASCONN;
LPCB: LPDWORD;
lpcconnections: lpdword): dword;
stdcall;
ฟังก์ชั่น rasenumDevices (
lprasdevinfo: lprasdevinfo;
LPCB: LPDWORD;
lpcdevices: lpdword): dword;
stdcall;
ฟังก์ชั่น rascreatephonebookentry (
มือจับ: hwnd; lpszphonebook: pchar): dword;
stdcall;
ฟังก์ชั่น rasdeleteentry (
lpszphonebook: pchar;
lpszentry: pchar): dword;
stdcall;