Il y a quelque temps, j'ai écrit une classe pour composer des fenêtres en raison des besoins de travail.现在支持读取windows拨号连接列表、拨号、挂断、创建/删除连接,可以适用98/2000/XP,windows me 和NT没测试过,想来应该是可以的。 À l'avenir, si vous avez le temps, écrivez-le en tant que composant et ajoutez la prise en charge des événements de numérotation.
usages
Ras, classes, sysutils, strutils, fenêtres, formes;
taper
ERASERROR = Exception;
taper
Trasconnection = classe
Privé
Fplatform: entier;
Fconned: booléen;
Frasentries: TStringList;
Frasconn: Hrasonn;
FPARAMS: Rasdialparams;
Ferno: entier;
fonction getPassword: String;
Procédure setPassword (mot de passe: chaîne);
fonction getphoneno: string;
Procédure setPhoneno (numéro: chaîne);
fonction getCallback: String;
Procédure setCallback (numéro: chaîne);
fonction getDomain: String;
Procédure setDomain (domaine: chaîne);
fonction getUserName: String;
Procédure setUserName (nom d'utilisateur: chaîne);
Fonction GetEntryName: String;
Procédure setEntryName (entrée: chaîne);
Fonction GetConnected: Boolean;
Procédure SetConnected (Avalue: Boolean);
Fonction GetRasentries: TStringList;
publique
Propriété Rasentries: TStringList Lire GetRasentries;
Propriété Phonenumber: String Read getPhoneno Write Setphoneno;
propriété callbackNumber: String read GetCallback Write SetCallback;
Domaine de propriété: String Read GetDomain Write SetDomain;
Propriété EntryName: String Read GetEntryName Write SetEntryName;
Property Username: String Read GetUsername Write SetUsername;
Mot de passe de la propriété: String Read GetPassword Write SetPassword;
Propriété active: Boolean Read GetConnectecd Write SetConnedcyd;
procédure Connect;
procédure déconnectée;
fonction getErrorCode: entier;
Procédure FreeandHangup;
Conclusion Créer;
Destructor détruire;
procédure CreataSentry;
Procédure DeleterAsentry (AentryName: String);
// Fonction GetErrorRaison: entier;
fin;
Mise en œuvre
{Trasconnection}
procédure trasconnection.connect;
var
I: entier;
S: String;
Commencer
Fparams.dwSize: = sizeof (rasdialParams);
i: = rasdial (nil, nil, @fparams, 0, nil, @frasconn);
Si je <> 0 alors commencez
Ferrno: = i;
cas I de
691: S: = 'La vérification de l'identité a échoué!';
692: S: = 'L'ouverture du port a échoué!';
676: S: = 'La ligne est occupée, veuillez vous rendre à nouveau!';
677: S: = 'Erreur de réponse vocale!';
678: S: = «Pas de réponse!»;
679: S: = 'No Carrier Signal!';
680: S: = 'No Down Tone!';
autre
S: = 'Erreur inconnue!';
fin;
Rashangup (Frasconn);
élever Eraserror.Create (s);
fin
else fconned: = true;
fin;
procédure trasconnection.Disconnect;
Commencer
Rashangup (Frasconn);
Frasconn: = 0;
fin;
fonction trasconnection.getCallback: String;
Commencer
Résultat: = String (fParams.szCallBackNumber);
fin;
fonction trasconnection.getConnected: booléen;
var
I, Len, num: entier;
X: tableau de rasconn;
Commencer
Résultat: = false;
SetLength (x, 1);
x [0] .dwsize: = sizeof (rasconn);
len: = x [0] .dwSize;
num: = 0;
RasenumConnections (@x [0], @len, @num);
Si num> 0 alors commencez
SetLength (x, num);
x [0] .dwsize: = sizeof (rasconn);
Len: = x [0] .dwSize;
RasenumConnections (@x [0], @len, @num);
pour i: = 1 à num do
Si strComp (x [i - 1] .szentryname, pChar (entrée)) = 0 alors commencez
Frasconn: = x [i - 1] .hrasconn;
Résultat: = true;
Casser;
fin;
fin;
SetLength (x, 0);
fin;
fonction trasconnection.getDomain: String;
Commencer
Résultat: = String (fParams.szdomain);
fin;
fonction trasconnection.getERRORCODE: entier;
Commencer
Résultat: = Ferrno;
fin;
fonction trasconnection.getpassword: chaîne;
Commencer
Résultats: = '*********';
fin;
fonction trasconnection.getphoneno: String;
Commencer
Résultat: = String (fParams.szPhonEnUmber);
fin;
fonction trasconnection.getEntryName: String;
Commencer
Résultat: = String (fParams.SzentryName);
fin;
fonction trasconnection.getUserName: String;
Commencer
Résultat: = String (fParams.SzUsername);
fin;
procédure trasconnection.setCallback (numéro: chaîne);
Commencer
StrlCopy (fParams.szcallbacknumber, pChar (nombre), sizeof (fParams.szcallbacknumber) - 1);
fin;
procédure trasconnection.setConned (Avalue: Boolean);
Commencer
Si AVALUE ET NE PAS être connecté, connectez-vous
Sinon, sinon AVALUE et GETCONNECTED, puis déconnectez-vous;
fin;
procédure trasconnection.setDomain (domaine: chaîne);
Commencer
StrlCopy (fParams.szdomain, phar (domaine), sizeof (fParams.szdomain) - 1);
fin;
procédure trasconnection.setpassword (mot de passe: chaîne);
Commencer
StrlCopy (fParams.szpassword, phar (mot de passe), sizeof (fParams.szpassword) - 1);
fin;
procédure trasconnection.setphoneno (numéro: chaîne);
Commencer
StrlCopy (fParams.szphonenumber, phar (nombre), sizeof (fParams.szphonenumber) - 1);
fin;
procédure trasconnection.SetEntryName (entrée: chaîne);
var
I: entier;
Commencer
pour i: = 0 à Frasentries.Count - 1 do
Si frasentries.strings [i] = entrée, alors commencez
StrCopy (fParams.SzentryName, pChar (entrée));
Sortie;
fin;
StrCopy (fParams.szentryname, '');
fin;
procédure trasconnection.setUsername (nom d'utilisateur: chaîne);
Commencer
StrlCopy (fparams.szusername, pChar (nom d'utilisateur), sizeof (fParams.szusername) - 1);
fin;
procédure trasconnection.freandhangup;
Commencer
Si actif alors déconnectez-vous;
Gratuit;
fin;
fonction trasconnection.getRasentries: tStringList;
var
Ren: Array de Rasentryname;
Ren98: tableau de rasentryname98;
C, L: entier;
Commencer
Frasentries.Clear;
C: = 0;
cas fplatform de
Ver_platform_win32_windows:
Commencer
setLength (Ren98, 1);
Ren98 [0] .dwsize: = sizeof (rasentryname98);
l: = sizeof (rasentryname98);
Si rasenumentries (nil, nil, @ ren98 [0], @l, @c) = error_buffer_too_small, alors commencez
setLength (ren, c);
Rasenumentries (nil, nil, @ ren98 [0], @l, @c);
fin;
tandis que c> 0 commence
Frasentries.Add (String (Ren98 [C - 1] .SzentryName));
Déc (c);
fin;
SetLength (Ren98, 0);
fin;
Ver_platform_win32_nt:
Commencer
setLength (Ren, 1);
Ren [0] .dwSize: = sizeof (rasentryname);
l: = sizeof (rasentryname);
Si rasenumentries (nil, nil, @ren [0], @l, @c) = error_buffer_too_small alors commencez
setLength (ren, c);
Rasenumentries (nil, nil, @ren [0], @l, @c);
fin;
tandis que c> 0 commence
Frasentries.add (String (ren [c - 1] .szentryname));
Déc (c);
fin;
SetLength (Ren, 0);
fin;
fin;
si Frasentries.Count> 0 alors entryName: = Frasentries.strings [0];
Résultats: = frasentries;
fin;
Constructeur Trasconnection.Create;
var
OS: OsversionInfoa;
Commencer
hérité;
Os.dwosversionInfosize: = sizeof (osversionInfoa);
GetVersionEx (OS);
Fplatform: = os.dwplatformId;
Frasentries: = TStringList.Create;
GetRasentries;
fin;
destructor trasconnection.destroy;
Commencer
Frasentries.free;
hérité;
fin;
procédure trasconnection.creareAsentry;
Commencer
RascreatePhoneBookEntry (application.handle, nil);
fin;
procédure trasconnection.deleteraSentry (Aentryname: String);
var
I: entier;
Commencer
i: = Frasentries.Indexof (Aentryname);
Si i = -1 alors sortez;
Frasentries.delete (i);
Si AentryName = EntryName alors
Si Frasentries.Count> 0 alors entryName: = Frasentries.strings [0]
else entryName: = '';
RasdeleteEntry (nil, phar (aentryname));
fin;
Énoncé de l'API:
fonction rasdial (
lprasdialextensions: prasdialextensions;
LPSZPhoneBook: LPCTSTR;
LPRASDIALPARAMS: LPRASDIALPARAMS;
DwnotifierType: DWORD;
LPVNotifier: pointeur;
LPHRASCONC: LPHRASCONC): DWORD;
stdcall; rasapi32.dll «name» rasdiala »;
Fonction Rashangup (Rasconn: HRASCCON): DWORD;
stdcall; rasapi32.dll «name» rashangupa »;
fonction rasgentrydialparams (
LPSZPhoneBook: LPCTSTR;
LPRASDIALPARAMS: LPRASDIALPARAMS;
lpfpassword: lpbool): dword;
stdcall; rasapi32.dll «name» rasgentryDialParamsa »;
Rasénumentries de fonction (
Réservé: LPCTSTR;
LPSZPhoneBook: LPCTSTR;
lprasentryname: lprasentryname;
LPCB: LPDword;
lpcentries: lpdword): dword;
stdcall; «rasapi32.dll« name »rasenumentrie»;
fonction RedateThoneBookEntry (
hwnd: hwnd;
LPSZPhoneBook: LPCTSTR;
lpszentryname: lpctstr): dword;
stdcall; «rasapi32.dll« name »raseditPhoneBookEntrya»;
fonction rasgetentryproperties (
LPSZPhoneBook: LPCTSTR;
LPSZentry: lpcTSTR;
lprasentry: lprasentry;
lpdwentryInfosize: lpdword;
lpbDeviceInfo: pbyte;
lpdwdeviceInfosize: lpdword): dword;
stdcall; rasapi32.dll «name» rasgentrypropertiesa »;
fonction rassentryproperties (
LPSZPhoneBook: LPCTSTR;
LPSZentry: lpcTSTR;
lprasentry: lprasentry;
DwentryInfosize: DWORD;
lpbDeviceInfo: pbyte;
dwdeviceInfosize: dword): dword;
stdcall; rasapi32.dll «name» rassentrypropertiesa »;
fonction rasenumconnections (
LPRASCONC: LPRASCONC;
LPCB: LPDword;
lpcconnections: lpdword): dword;
stdcall; rasapi32.dll «name» rasenumconnectionsa »;
fonction rasenumdevices (
lprasdevinfo: lprasdevinfo;
LPCB: LPDword;
lpcdevices: lpdword): dword;
stdcall; rasapi32.dll «name» rasenumDevicesa »;
fonction rascreatephonebookentry (
Gandoue: HWND; LPSZPhonebook: PCHA): DWORD;
stdcall; rasapi32.dll «name» rascreatephonebookaa »;
fonction rasdeleteentry (
LPSZPhoneBook: PCHA;
lpszentry: phar): dword;
stdcall; «rasapi32.dll« name »rasdeleteentrya»;