しばらく前に、私はそれを整理し、いくつかのWindows Ras APIをカプセル化して、私はそれを整理し、クラスを書きました。これで、Windowsダイヤルアップ接続リストの読み取り、ダイヤル、ハングアップ、接続の作成/削除をサポートし、98/2000/XPに使用できます。将来的には、時間がある場合は、コンポーネントとして書いて、イベントのダイヤルのサポートを追加します。
用途
ras、classes、sysutils、strutils、windows、forms;
タイプ
eraserror = Exception;
タイプ
trasconnection = class
プライベート
fplatform:整数;
fconnected:boolean;
Frasentries:tstringlist;
Frasconn:hrasconn;
fparams:rasdialparams;
フェルノ:整数;
function getPassword:string;
手順SetPassWord(パスワード:文字列);
関数getphoneno:string;
手順setphoneno(number:string);
関数getCallback:string;
手順SetCallback(number:string);
関数GetDomain:string;
手順SetDomain(domain:string);
関数getUsername:string;
手順setUsername(username:string);
関数getEntryName:string;
手順setentryname(entry:string);
function getConnect:boolean;
手順setConnected(avalue:boolean);
関数GetRasentries:TStringList;
公共
プロパティRasentries:tstringlist read getrasentries;
プロパティ電話:文字列読み取りgetphoneno write setphoneno;
プロパティCallBackNumber:String read getCallback write setCallback;
プロパティドメイン:文字列read getDomain Write SetDomain;
プロパティエントリ名:文字列read getEntryName write setentryname;
プロパティユーザー名:文字列read getUsername write setusername;
プロパティパスワード:文字列getpassword write setpasswordを読み取ります。
プロパティアクティブ:boolean read getConnected write setConnected;
手順接続。
手順の切断。
関数GetErrorCode:整数;
手順FREEANDHANGUP;
コンストラクターCreate;
破壊者はオーバーライドします。
手順CREATERASENTRY;
手順deleterasentry(aentryname:string);
//関数geterrorraseason:integer;
終わり;
実装
{trasconnection}
手順trasconnection.connect;
var
I:整数;
S:文字列;
始める
fparams.dwsize:= sizeof(rasdialparams);
i:= rasdial(nil、nil、@fparams、0、nil、 @frasconn);
i <> 0の場合、開始します
ferrno:= i;
のケースI
691:s:= 'IDの検証が失敗しました!';
692:s:= 'ポートの開口部が失敗!';
676:s:= '行は忙しいです。待って、もう一度ダイヤルしてください!';
677:s:= '音声応答エラー!';
678:s:= '答えなし!';
679:s:= 'キャリア信号なし!';
680:s:= 'ダイヤルトーンなし!';
それ以外
s:= '不明なエラー!';
終わり;
Rashangup(Frasconn);
eraserror.create(s)を上げる;
終わり
else fconnected:= true;
終わり;
手順trasconnection.disconnect;
始める
Rashangup(Frasconn);
frasconn:= 0;
終わり;
関数trasconnection.getCallback:string;
始める
結果:= string(fparams.szcallbacknumber);
終わり;
関数trasconnection.getConnected:boolean;
var
I、len、num:integer;
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 to numの場合
strcomp(x [i -1] .szentryname、pchar(entryName))= 0の場合、開始します
frasconn:= x [i -1] .hrasconn;
結果:= true;
壊す;
終わり;
終わり;
setLength(x、0);
終わり;
関数trasconnection.getDomain:string;
始める
結果:= string(fparams.szdomain);
終わり;
関数trasconnection.getErrorCode:integer;
始める
結果:= ferrno;
終わり;
function trasconnection.getPassword:string;
始める
結果:= '*********';
終わり;
関数trasconnection.getphoneno:string;
始める
結果:= string(fparams.szphoneNumber);
終わり;
関数trasconnection.getEntryName:string;
始める
結果:= string(fparams.szentryname);
終わり;
function trasconnection.getUsername:string;
始める
結果:= string(fparams.szusername);
終わり;
手順trasconnection.setCallback(number:string);
始める
strlcopy(fparams.szcallbacknumber、pchar(number)、sizeof(fparams.szcallbacknumber)-1);
終わり;
手順trasconnection.setConnected(avalue:boolean);
始める
AvalueでgetConnectedを取得していない場合は、接続します
それ以外の場合は、AvalueとGetConnectedを使用してから切断してください。
終わり;
手順trasconnection.setDomain(domain:string);
始める
strlcopy(fparams.szdomain、pchar(domain)、sizeof(fparams.szdomain)-1);
終わり;
手順trasconnection.setPassWord(パスワード:文字列);
始める
strlcopy(fparams.szpassword、pchar(パスワード)、sizeof(fparams.szpassword)-1);
終わり;
手順trasconnection.setphoneno(number:string);
始める
strlcopy(fparams.szphoneNumber、pchar(number)、sizeof(fparams.szphoneNumber)-1);
終わり;
手順trasconnection.setEntryName(entry:string);
var
I:整数;
始める
i:= 0 to frasentries.count -1 do
frasentries.strings [i] = entryの場合、開始します
strcopy(fparams.szentryname、pchar(entry));
出口;
終わり;
strcopy(fparams.szentryname、 '');
終わり;
手順trasconnection.setUsername(username:string);
始める
strlcopy(fparams.szusername、pchar(username)、sizeof(fparams.szusername)-1);
終わり;
手順trasconnection.freeandhangup;
始める
アクティブな場合は、切断します。
無料;
終わり;
function trasconnection.getrasentries:tstringlist;
var
Ren: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、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));
12月(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の場合、begin begin
setLength(ren、c);
rasenumentries(nil、nil、@ren [0]、@l、@c);
終わり;
C> 0が始まります
frasentries.add(string(ren [c -1] .szentryname));
12月(c);
終わり;
setLength(ren、0);
終わり;
終わり;
frasentries.count> 0の場合、entryname:= frasentries.strings [0];
結果:= frasentries;
終わり;
Constructor trasconnection.create;
var
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);
var
I:整数;
始める
i:= frasentries.indexof(aentryname);
i = -1の場合、終了します。
frasentries.delete(i);
aentryname = entryNameの場合
frasentries.count> 0の場合、entryname:= frasentries.strings [0]
else entryName:= '';
rasdeleteentry(nil、pchar(aentryname));
終わり;
APIステートメント:
function rasdial(
lprasdialextensions:prasdialextensions;
LPSZPhoneBook:LPCTSTR;
lprasdialparams:lprasdialparams;
dwnotifiertype:dword;
lpvnotifier:pointer;
lphrasconn:lphrasconn):dword;
stdcall; rasapi32.dll 'name' rasdiala ';
function rashangup(rasconn:hrasconn):dword;
stdcall; rasapi32.dll 'name' Rashangupa ';
関数rasgetentrydialparams(
LPSZPhoneBook:LPCTSTR;
lprasdialparams:lprasdialparams;
lpfpassword:lpbool):dword;
stdcall; rasapi32.dll 'name' rasgetentrydialparamsa ';
関数rasenumentries(
予約済み:LPCTSTR;
LPSZPhoneBook:LPCTSTR;
lprasentryname:lprasentryname;
LPCB:LPDWORD;
lpcentries:lpdword):dword;
stdcall;
function radeditphonebookentry(
hwnd:hwnd;
LPSZPhoneBook:LPCTSTR;
lpszentryname:lpctstr):dword;
stdcall; rasapi32.dll 'name' radeditphonebookentrya ';
関数rasgetentryproperties(
LPSZPhoneBook:LPCTSTR;
lpszentry:LPCTSTR;
lprasentry:lprasentry;
lpdwentryinfosize:lpdword;
lpbdeviceinfo:pbyte;
lpdwdeviceinfosize:lpdword):dword;
stdcall; rasapi32.dll 'name' rasgetentrypropertiesa ';
関数raseTentryProperties(
LPSZPhoneBook:LPCTSTR;
lpszentry:LPCTSTR;
lprasentry:lprasentry;
dwentryinfosize:dword;
lpbdeviceinfo:pbyte;
dwdeviceinfosize:dword):dword;
stdcall; rasapi32.dll 'name' rassetentrypropertiesa ';
関数rasenumConnections(
lprasconn:lprasconn;
LPCB:LPDWORD;
lpcconections:lpdword):dword;
stdcall; rasapi32.dll 'name' rasenumconnectionsa ';
関数rasenumdevices(
lprasdevinfo:lprasdevinfo;
LPCB:LPDWORD;
lpcdevices:lpdword):dword;
stdcall; rasapi32.dll 'name' rasenumdevicesa ';
関数rascreatephonebookentry(
ハンドル:hwnd; lpszphonebook:pchar):dword;
stdcall; rasapi32.dll 'name' rascreatephonebookentrya ';
関数rasdeleteentry(
LPSZPhoneBook:PCHAR;
lpszentry:pchar):dword;
stdcall; rasapi32.dll 'name' rasdeleteentrya ';