Некоторое время назад я написал класс, чтобы набрать Windows из -за работы. Теперь он поддерживает чтение списка соединений с циклом Windows, набрать, повесить трубку, создание/удаление соединений и может использоваться для 98/2000/XP. В будущем, если у вас будет время, напишите его в качестве компонента и добавьте поддержку событий набора.
Использование
RAS, классы, Sysutils, Strutils, Windows, Forms;
тип
Eraserror = исключение;
тип
Trasconnection = класс
Частный
Fplatform: целое число;
Fconnected: логический;
Frasentries: TStringList;
Frasconn: Hrasconn;
Fparams: rasdialparams;
Ферно: целое число;
функция getPassword: String;
Процедура SetPassword (пароль: строка);
функция getPhoneno: String;
Процедура SetPhoneno (номер: строка);
функция getCallback: String;
процедура setCallback (номер: строка);
функция GetDomain: String;
Процедура SetDomain (домен: String);
функция getUsername: String;
процедура setUsername (имя пользователя: строка);
функция getEntryName: String;
процедура setEntryName (intpirt: string);
Функция получается: логический;
Процедура SetConnected (Avalue: Boolean);
функция getRasentries: tStringList;
публичный
Rasentries: tstringlist читайте getrasentries;
Свойство PhoneNumber: String Read GetPhoneno Write SetPhoneno;
Свойство Callbacknumber: строка чтение getCallback write setCallback;
Свойство домен: строка чтения getDomain write setdomain;
Свойство rentname: string Read getEntryName write setEntryName;
Свойство имя пользователя: String Read getUsername write setusername;
Свойство пароль: строка read getPassword write setPassword;
Свойство активно: логическое чтение GetConnected Write SetConnected;
процедура подключения;
процедура отключится;
функция getErrorCode: Integer;
Процедура FreeAndhangup;
конструктор создать;
разрушитель разрушает;
процедура CreaterasEntry;
процедура DeleterAsentry (AentryName: String);
// Функция GeterRorrorSeason: Integer;
конец;
Выполнение
{Trasconnection}
процедура trasconnection.connect;
вар
я: целое число;
S: String;
Начинать
Fparams.dwsize: = sizeof (rasdialparams);
i: = rasdial (ноль, ноль, @fparams, 0, nil, @frasconn);
Если я <> 0, то начните
Ferrno: = i;
Случай i of
691: S: = 'Проверка личности не удалась!';
692: S: = 'ОТКЛЮЧЕНИЕ ПЕРЕДАЧА!';
676: S: = 'Линия занята, подождите и наберите еще раз!';
677: S: = 'Ошибка голосового ответа!';
678: S: = 'Нет ответа!';
679: S: = 'Нет сигнала носителя!';
680: S: = 'Нет тона набора!';
еще
S: = 'неизвестная ошибка!';
конец;
Рашангап (Фраскон);
поднять eraserror.create (ы);
конец
else fconnected: = true;
конец;
Процедура trasconnection.disconnect;
Начинать
Рашангап (Фраскон);
Frasconn: = 0;
конец;
function trasconnection.getCallback: String;
Начинать
Результат: = String (fparams.szcallbacknumber);
конец;
function trasconnection.getConnected: boolean;
вар
Я, Лен, Num: целое число;
X: массив Rasconn;
Начинать
Результат: = false;
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 (rentname)) = 0, затем начинайте
Frasconn: = x [i - 1] .hrasconn;
Результат: = true;
Перерыв;
конец;
конец;
SetLength (x, 0);
конец;
функция trasconnection.getDomain: String;
Начинать
Результат: = строка (fparams.szdomain);
конец;
function trasconnection.getErrorCode: Integer;
Начинать
Результат: = FERRNO;
конец;
function trasconnection.getPassword: String;
Начинать
Результаты: = '*********';
конец;
function trasconnection.getPhoneno: String;
Начинать
Результат: = String (fparams.SphoneNumber);
конец;
function trasconnection.getEntryName: String;
Начинать
Результат: = String (fparams.szentryName);
конец;
function trasconnection.getusername: String;
Начинать
Результат: = String (fparams.szusername);
конец;
Процедура trasconnection.setCallback (номер: строка);
Начинать
Strlcopy (fparams.szcallbacknumber, pchar (номер), sizeof (fparams.szcallbacknumber) - 1);
конец;
процедура trasconnection.setConnected (Avalue: Boolean);
Начинать
Если Avalue, а не быть связанным, подключите
иначе, если не ладон и быть связанным, отключите;
конец;
Процедура trasconnection.setdomain (домен: строка);
Начинать
Strlcopy (fparams.szdomain, pchar (домен), sizeof (fparams.szdomain) - 1);
конец;
Процедура trasconnection.setPassword (пароль: строка);
Начинать
Strlcopy (fparams.szpassword, pchar (пароль), sizeof (fparams.szpassword) - 1);
конец;
Процедура trasconnection.setPhoneno (номер: строка);
Начинать
Strlcopy (fparams.sphonenumber, pchar (номер), sizeof (fparams.szphonenumber) - 1);
конец;
Процедура trasconnection.setEntryName (intry: string);
вар
я: целое число;
Начинать
для i: = 0 to frasentries.count - 1 do
Если frasentries.strings [i] = intry, тогда начните
Strcopy (fparams.szentryname, pchar (entry));
Выход;
конец;
Strcopy (fparams.szentryname, '');
конец;
Процедура trasconnection.setusername (имя пользователя: строка);
Начинать
Strlcopy (fparams.szusername, pchar (имя пользователя), sizeof (fparams.szusername) - 1);
конец;
процедура trasconnection.freAndhangup;
Начинать
Если активно, отключите;
Бесплатно;
конец;
function trasconnection.getrasentries: tstringlist;
вар
Рен: массив RasentryName;
REN98: массив RasentryName98;
C, L: целое число;
Начинать
Frasentries.clear;
c: = 0;
Дело Fplatform of
Ver_platform_win32_windows:
Начинать
SetLength (REN98, 1);
ren98 [0] .dwsize: = sizeof (rasentryName98);
l: = sizeof (rasentryName98);
Если rasenumentries (nil, 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, nil, @ren [0], @l, @c) = error_buffer_too_small, затем начинайте
setLength (ren, c);
Rasenumentries (nil, nil, @ren [0], @l, @c);
конец;
пока c> 0 начинается
Frasentries.add (string (ren [c - 1] .szentryname));
Дек (c);
конец;
SetLength (ren, 0);
конец;
конец;
Если frasentries.count> 0, то rentname: = frasentries.strings [0];
Результаты: = frasentries;
конец;
конструктор trasconnection.create;
вар
ОС: Osversioninfoa;
Начинать
унаследован;
Os.dwosverioninfosize: = 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 = rentname тогда
Если frasentries.count> 0, то outmentname: = frasentries.strings [0]
else rentname: = '';
Rasdeleteentry (ноль, pchar (aentryname));
конец;
Заявление API:
функция Расдиал (
Lprasdialextensions: Prasdialextensions;
LPSZPPOREBOOK: LPCTSTR;
LprasdialParams: LprasdialParams;
dwnotifiertype: dword;
lpvnotifier: указатель;
LPHRASCONN: LPHRASCONN): DWORD;
stdcall;
Функция Rashangup (Rasconn: Hrasconn): dword;
stdcall;
функция RasgetEntryDialParams (
LPSZPPOREBOOK: LPCTSTR;
LprasdialParams: LprasdialParams;
LPFPASSWORD: LPBOOL): DWORD;
stdcall;
функционируйте расиментирование (
Зарезервировано: LPCTSTR;
LPSZPPOREBOOK: LPCTSTR;
LprasentryName: LprasentryName;
LPCB: LPDWORD;
LPCentries: LPDWORD): DWORD;
stdcall;
функция raseditphoneBookEntry (
hwnd: hwnd;
LPSZPPOREBOOK: LPCTSTR;
LpsEntryName: LPCTSTR): DWORD;
stdcall;
функция RasgetEntryProperties (
LPSZPPOREBOOK: LPCTSTR;
Lpszentry: LPCTSTR;
Lprasentry: Lprasentry;
lpdwentryinfosize: lpdword;
lpbdeviceinfo: pbyte;
lpdwdeviceinfosize: lpdword): dword;
stdcall;
функция RassetEntryProperties (
LPSZPPOREBOOK: 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;
stdcall;
функция rasdeleteentry (
LPSZPPOREBOOK: PCHAR;
lpszentry: pchar): dword;
stdcall;