Hace un tiempo, escribí una clase para marcar Windows debido a las necesidades laborales. Ahora admite leer la lista de conexión de acceso telefónico de Windows, marcar, colgar, crear/eliminar conexiones, y puede usarse para 98/2000/XP. En el futuro, si tiene tiempo, escríbelo como un componente y agregue soporte para eventos de marcación.
usos
Ras, clases, sysutils, strutils, ventanas, formularios;
tipo
ErasError = excepción;
tipo
Trasconnection = clase
Privado
Fplatform: integer;
Fonectado: booleano;
Frasentries: tStringList;
Frasconn: Hrasconn;
FParams: RasdialParams;
Ferrno: entero;
función getPassword: string;
procedimiento setpassword (contraseña: cadena);
función getPhoneno: String;
procedimiento setPhoneno (número: cadena);
función getCallback: string;
procedimiento setCallback (número: cadena);
función getDomain: string;
procedimiento setdomain (dominio: cadena);
función getUsername: string;
procedimiento setUsername (nombre de usuario: string);
función getEntryName: String;
procedimiento setEntryName (entrada: cadena);
Función GetConnected: Boolean;
procedimiento setConnected (avalue: booleano);
función getRasEntries: tStringList;
público
Propiedad Rasentries: tStringList leer getrasentries;
Propiedad PhoneNumber: cadena Leer GetPhoneno Write SetPhoneno;
PROPIEDAD CallbackNumber: cadena Leer GetCallback Escribir setCallback;
Dominio de propiedad: String Read getDomain Write setDomain;
PROPIEDAD Entrada Name: String Read getEntryName Write setEntryName;
Nombre de usuario de la propiedad: cadena Leer getUsername escribir setUsername;
Contraseña de propiedad: cadena leer getPassword escribir setpassword;
Propiedad activa: Boolean Read GetConnected Write setConnected;
procedimiento conectar;
Procedimiento Desconectar;
función getErrorCode: Integer;
procedimiento Freeandhangup;
constructor crear;
Destructor destruir;
Procedimiento Creeasentry;
procedimiento deletrasEntry (AEntryName: String);
// función getErRorRason: Integer;
fin;
Implementación
{Trasconnection}
procedimiento Trasconnection.connect;
varilla
I: entero;
S: cadena;
Comenzar
Fparams.dwsize: = sizeof (rasdialparams);
I: = Rasdial (nil, nil, @fparams, 0, nil, @Frasconn);
Si yo <> 0 empieza
Ferrno: = i;
Caso I de
691: S: = '¡Falló la verificación de identidad!';
692: S: = '¡Falló en la apertura del puerto!';
676: S: = 'La línea está ocupada, ¡espere y marque de nuevo!';
677: S: = '¡Error de respuesta de voz!';
678: S: = '¡Sin respuesta!';
679: S: = '¡No hay señal portadora!';
680: S: = '¡Sin tono de marcado!';
demás
S: = '¡Error desconocido!';
fin;
Rashangup (Frasconn);
elevar Eraserror.create (s);
fin
más fconnected: = true;
fin;
procedimiento Trasconnection.disconnect;
Comenzar
Rashangup (Frasconn);
Frasconn: = 0;
fin;
function Trasconnection.getCallback: String;
Comenzar
Resultado: = string (fparams.szCallbackNumber);
fin;
función Trasconnection.getConnected: boolean;
varilla
I, Len, num: entero;
X: matriz de Rasconn;
Comenzar
Resultado: = falso;
SetLength (x, 1);
x [0] .dwsize: = sizeof (Rasconn);
len: = x [0] .dwsize;
num: = 0;
RasenumConnections (@x [0], @len, @num);
Si num> 0 entonces comienza
SetLength (x, num);
x [0] .dwsize: = sizeof (Rasconn);
len: = x [0] .dwsize;
RasenumConnections (@x [0], @len, @num);
para i: = 1 to num do
if strcomp (x [i - 1] .szentryName, pChar (EntryName)) = 0 entonces comience
Frasconn: = x [i - 1] .hrasconn;
Resultado: = verdadero;
Romper;
fin;
fin;
SetLength (x, 0);
fin;
función Trasconnection.getDomain: String;
Comenzar
Resultado: = string (fparams.szdomain);
fin;
function Trasconnection.getErrorCode: Integer;
Comenzar
Resultado: = ferrno;
fin;
function Trasconnection.getPassword: String;
Comenzar
Resultados: = '*********';
fin;
función Trasconnection.getPhoneno: String;
Comenzar
Resultado: = string (fparams.szphonEnumber);
fin;
función Trasconnection.getEntryName: String;
Comenzar
Resultado: = string (fparams.szentryName);
fin;
function Trasconnection.getUsername: String;
Comenzar
Resultado: = string (fparams.szusername);
fin;
procedimiento Trasconnection.SetCallback (número: cadena);
Comenzar
StrlCopy (fparams.szCallbackNumber, pChar (número), sizeof (fparams.szCallbackNumber) - 1);
fin;
procedimiento Trasconnection.SetConnected (Avalue: Boolean);
Comenzar
Si avalue y no se vuelve a conectar, conéctese
de lo contrario, si no es avalue y se confunde, desconecte;
fin;
procedimiento Trasconnection.setDomain (dominio: string);
Comenzar
Strlcopy (fparams.szdomain, pchar (dominio), sizeOf (fparams.szdomain) - 1);
fin;
procedimiento Trasconnection.setPassword (contraseña: string);
Comenzar
StrlCopy (fparams.szpassword, pchar (contraseña), sizeof (fparams.szpassword) - 1);
fin;
procedimiento Trasconnection.SetPhoneno (número: cadena);
Comenzar
StrlCopy (fparams.szphonEnumber, pchar (número), sizeof (fparams.szphonEnumber) - 1);
fin;
procedimiento Trasconnection.SetEntryName (entrada: cadena);
varilla
I: entero;
Comenzar
para i: = 0 a frasentries.count - 1 do
Si frasentries.strings [i] = entrada, entonces comience
StrCopy (fparams.szentryName, pChar (entrada));
Salida;
fin;
StrCopy (fparams.szentryName, '');
fin;
procedimiento Trasconnection.setUsername (nombre de usuario: string);
Comenzar
StrlCopy (fparams.szusername, pchar (nombre de usuario), sizeof (fparams.szusername) - 1);
fin;
procedimiento Trasconnection.freeandhangup;
Comenzar
si está activo, entonces desconecte;
Gratis;
fin;
función Trasconnection.getRasEntries: tStringList;
varilla
Ren: matriz de RasentryName;
Ren98: matriz de RasentryName98;
C, L: entero;
Comenzar
Frasentries. CLEAR;
c: = 0;
Caso Fplatform de
Ver_platform_win32_windows:
Comenzar
setLength (Ren98, 1);
Ren98 [0] .dwsize: = sizeof (rasentryName98);
l: = sizeof (rasentryName98);
Si Rasenumentries (nil, nil, @ren98 [0], @l, @c) = error_buffer_too_small entonces comience
setLength (ren, c);
Rasenumentries (nil, nil, @ren98 [0], @l, @c);
fin;
Mientras C> 0 comience
Frasentries.add (cadena (ren98 [c - 1] .szentryName));
Dec (c);
fin;
SetLength (Ren98, 0);
fin;
Ver_platform_win32_nt:
Comenzar
setLength (ren, 1);
ren [0] .dwsize: = sizeof (rasentryName);
l: = sizeof (rasentryName);
Si Rasenumentries (nil, nil, @ren [0], @l, @c) = error_buffer_too_small
setLength (ren, c);
Rasenumentries (nil, nil, @ren [0], @l, @c);
fin;
Mientras C> 0 comience
Frasentries.add (cadena (ren [c - 1] .szentryName));
Dec (c);
fin;
SetLength (ren, 0);
fin;
fin;
Si frasentries.count> 0 luego entryname: = frasentries.strings [0];
Resultados: = frasentries;
fin;
constructor trasconnection.create;
varilla
OS: OsversionInfoa;
Comenzar
heredado;
OS.DWOSVERSIONInfosize: = sizeof (OsversionInfoa);
GetVersionEx (OS);
Fplatform: = OS.DWPlatformID;
Frasentries: = tStringList.create;
Getrasentries;
fin;
Destructor Trasconnection.DestrOY;
Comenzar
Frasentries.
heredado;
fin;
Procedimiento Trasconnection.CreaterAsentry;
Comenzar
RascreatePhoneBookEntry (Application.Handle, nil);
fin;
procedimiento Trasconnection.DeleterAsEntry (AentryName: String);
varilla
I: entero;
Comenzar
i: = frasentries.indexof (aentryName);
Si i = -1 entonces salga;
Frasentries.delete (i);
if aEminname = EntryName entonces
Si Frasentries.count> 0 luego EntryName: = Frasentries.strings [0]
else EntryName: = '';
RasdeleteEntry (nil, pchar (aentryName));
fin;
Declaración de API:
función rasdial (
lPrasdialExtensions: prasdialExtensions;
LPSZPhoneBook: LPCTSTR;
LprasdialParams: LprasdialParams;
dWnotifiertype: dword;
lpvnotificador: puntero;
LPhrasconn: LPhrasconn): dword;
stdcall;
function rashangup (Rasconn: hrasconn): dword;
stdcall;
función rasgetentrydialParams (
LPSZPhoneBook: LPCTSTR;
LprasdialParams: LprasdialParams;
lpfpassword: lpbool): dword;
stdcall;
función rasenumentries (
reservado: LPCTSTR;
LPSZPhoneBook: LPCTSTR;
lprasEntryName: lprasEntryName;
LPCB: LPDWORD;
lpcentries: lpdword): dword;
stdcall;
function RasedItPhipeBookEntry (
hwnd: hwnd;
LPSZPhoneBook: LPCTSTR;
lpszentryName: lpctstr): dword;
stdcall;
función rasgetentryproperties (
LPSZPhoneBook: LPCTSTR;
lpszentry: lpctstr;
Lprasentry: LprasEntry;
LPDWENTRYINFOSIZE: LPDWORD;
lpbDeviceInfo: pbyte;
lpdwdeviceInfosize: lpdword): dword;
stdcall;
función RassetEntryProperties (
LPSZPhoneBook: LPCTSTR;
lpszentry: lpctstr;
Lprasentry: LprasEntry;
dwentryinfosize: dword;
lpbDeviceInfo: pbyte;
dwdeviceInfosize: dword): dword;
stdcall;
function RasenumConnections (
Lpasconn: Lprasconn;
LPCB: LPDWORD;
LPCConnections: Lpdword): dword;
stdcall;
función rasenumdevices (
lprasdevinfo: Lprasdevinfo;
LPCB: LPDWORD;
LPCDEVICES: LPDWORD): DWORD;
stdcall;
función rascreatePhoneBookEntry (
Manejar: hwnd;
stdcall;
función rasdeleteEntry (
LPSZPhoneBook: PCHAR;
lpszentry: pchar): dword;
stdcall;