얼마 전, 나는 작업 요구로 인해 창문을 작성하고 여러 Windows RAS API를 캡슐화했습니다. 이제 Windows 다이얼 업 연결 목록, 전화 걸기, 끊기, 연결 생성/삭제를 지원하며 98/2000/xp에 사용될 수 있으므로 괜찮습니다. 앞으로 시간이 있다면 구성 요소로 작성하고 전화 걸기 이벤트에 대한 지원을 추가하십시오.
용도
RAS, 클래스, 시스템, 스트 루틸, 창, 형태;
유형
Eraserror = 예외;
유형
trasconnection = 클래스
사적인
fplatform : 정수;
fconnected : 부울;
Frasentries : TStringlist;
Frasconn : Hrasconn;
fparams : rasdialparams;
Ferrno : 정수;
함수 getpassword : 문자열;
절차 setpassword (비밀번호 : 문자열);
함수 getphoneno : 문자열;
절차 setphoneno (번호 : 문자열);
함수 getCallback : 문자열;
절차 setCallback (번호 : 문자열);
함수 getDomain : 문자열;
절차 setDomain (도메인 : 문자열);
함수 getUserName : 문자열;
절차 setUserName (사용자 이름 : String);
함수 getEntryName : String;
절차 setentRyName (Entry : String);
기능 getconnected : 부울;
절차 setConnected (avalue : boolean);
기능 getrasentries : tstringlist;
공공의
속성 rasentries : tstringlist 읽기 Getrasentries;
Property PhoneNumber : 문자열 읽기 GetPhoneno 쓰기 Setphoneno;
Property CallbackNumber : 문자열 읽기 GetCallback 쓰기 SetCallback;
속성 도메인 : 문자열 읽기 getDomain write setDomain;
속성 엔트리 이름 : String read getEntryName write setentRyName;
속성 사용자 이름 : 문자열 읽기 getUserName write setUserName;
속성 비밀번호 : 문자열 읽기 getpassword write setpassword;
속성 활성 : 부울 읽기 GetConnected Write SetConnected;
절차 연결;
절차 분리;
함수 getErrorCode : 정수;
절차 FreeAndhangup;
생성자 생성; 재 도입;
소멸자 파괴;
절차 크리터 센트리;
절차 deleterAsentry (AENTRYNAME : String);
// 함수 getErrorReason : 정수;
끝;
구현
{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 : = '신원 확인 실패!';
692 : S : = '포트 오프닝 실패!';
676 : s : = '줄이 바쁘다. 기다렸다가 다시 전화를 걸어!';
677 : s : = '음성 응답 오류!';
678 : s : = '답이 없다!';
679 : s : = '캐리어 신호 없음!';
680 : S : = '발신 톤 없음!';
또 다른
S : = '알 수없는 오류!';
끝;
Rashangup (Frasconn);
Eraserror를 높이십시오.
끝
else fconnected : = true;
끝;
절차 trasconnection.disconnect;
시작하다
Rashangup (Frasconn);
Frasconn : = 0;
끝;
함수 trasconnection.getCallback : String;
시작하다
결과 : = 문자열 (fparams.szcallbacknumber);
끝;
함수 trasconnection.getConnected : 부울;
var
I, Len, Num : Integer;
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 : 문자열;
시작하다
결과 : = 문자열 (fparams.szdomain);
끝;
함수 trasconnection.geterRorCode : 정수;
시작하다
결과 : = ferrno;
끝;
함수 trasconnection.getPassword : 문자열;
시작하다
결과 : = '*********';
끝;
함수 trasconnection.getphoneno : 문자열;
시작하다
결과 : = 문자열 (fparams.szphoneNumber);
끝;
함수 trasconnection.getEntryName : 문자열;
시작하다
결과 : = 문자열 (fparams.szentryname);
끝;
함수 trasconnection.getUserName : 문자열;
시작하다
결과 : = 문자열 (fparams.szusername);
끝;
절차 trasconnection.setCallback (번호 : 문자열);
시작하다
strlcopy (fparams.szcallbacknumber, pchar (번호), sizeof (fparams.szcallbacknumber) -1);
끝;
절차 trasconnection.setConnected (avalue : boolean);
시작하다
avalue이고 연결되지 않은 경우 연결하십시오
그렇지 않으면 avalue를 사용하지 않고 연결하지 않으면 연결이 끊어집니다.
끝;
절차 trasconnection.setDomain (도메인 : 문자열);
시작하다
strlcopy (fparams.szdomain, pchar (도메인), sizeof (fparams.szdomain) -1);
끝;
절차 trasconnection.setpassword (비밀번호 : 문자열);
시작하다
strlcopy (fparams.szpassword, pchar (password), sizeof (fparams.szpassword) -1);
끝;
절차 trasconnection.setphoneno (번호 : 문자열);
시작하다
strlcopy (fparams.szphoneNumber, pchar (번호), sizeof (fparams.szphoneNumber) -1);
끝;
절차 trasconnection.SetEntryName (Entry : String);
var
I : 정수;
시작하다
i : = 0 to frasentries.count -1 do
frasentries.strings [i] = 입력 인 경우 시작하십시오
strcopy (fparams.szentryname, pchar (Entry));
출구;
끝;
strcopy (fparams.szentryname, '');
끝;
절차 trasconnection.setusername (사용자 이름 : String);
시작하다
strlcopy (fparams.szusername, pchar (username), sizeof (fparams.szusername) -1);
끝;
절차 trasconnection.FreeAndHangup;
시작하다
활성화 된 경우 연결을 끊습니다.
무료;
끝;
기능 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 (문자열 (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을 시작한 경우
setlength (ren, c);
RasenumentRies (nil, nil, @ren [0], @l, @c);
끝;
C> 0이 시작되는 동안
frasentries.add (문자열 (ren [c -1] .szentryname);
12 월 (c);
끝;
setLength (ren, 0);
끝;
끝;
frasentries.count> 0 인 경우 entername : = frasentries.strings [0];
결과 : = Frasentries;
끝;
생성자 trasconnection.create;
var
OS : osversioninfoa;
시작하다
상속;
os.dwosversioninfosize : = sizeof (osversioninfoa);
getversionex (OS);
fplatform : = os.dwplatformid;
Frasentries : = tstringlist.create;
getrasentries;
끝;
소멸자 trasconnection. Destroy;
시작하다
frasentries.free;
상속;
끝;
절차 trasconnection.CreaterAnsentry;
시작하다
RascreatePhoneBookEntry (Application.Handle, NIL);
끝;
절차 trasconnection.deleterAsentry (AentryName : String);
var
I : 정수;
시작하다
i : = frasentries.indexof (Aentryname);
i = -1이면 종료됩니다.
frasentries.delete (i);
AENTRYNAME = ENTERNAME이면
frasentries.count> 0 인 경우 enthrename : = frasentries.strings [0]
else entryname : = '';
rasdeleteentry (nil, pchar (aentryname));
끝;
API 문 :
함수 rasdial (
lprasdialextensions : prasdialextensions;
lpszphonebook : lpctstr;
lprasdialparams : lprasdialparams;
dwnotifiertype : dword;
lpvnotifier : 포인터;
lphrasconn : lphrasconn) : dword;
stdcall; 외부 'rasapi32.dll'name 'rasdiala';
기능 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; 외부 'rasapi32.dll'name 'rasenumentriesa';
함수 raseditphonebookentry (
HWND : HWND;
lpszphonebook : lpctstr;
lpszentryname : lpctstr) : dword;
stdcall; 외부 'rasapi32.dll'name 'raseditphone bookentrya';
함수 RasgetEntryProperties (
lpszphonebook : lpctstr;
lpszentry : lpctstr;
lprasentry : lprasentry;
lpdwentryinfosize : lpdword;
lpbdeviceinfo : pbyte;
lpdwdeviceinfosize : lpdword) : dword;
stdcall; 외부 'rasapi32.dll'이름 'rasgetentrypropertiesa';
함수 RASSETENTRYPOPERTIES (
lpszphonebook : lpctstr;
lpszentry : lpctstr;
lprasentry : lprasentry;
dwentryinfosize : dword;
lpbdeviceinfo : pbyte;
dwdeviceinfosize : dword) : dword;
stdcall; 외부 'rasapi32.dll'name 'rassetentrypropertiesa';
기능 rasenumconnections (
lprasconn : lprasconn;
lpcb : lpdword;
lpcconnections : lpdword) : dword;
stdcall; 외부 'rasapi32.dll'이름 'rasenumconnectionsa';
함수 rasenumdevices (
lprasdevinfo : lprasdevinfo;
lpcb : lpdword;
lpcdevices : lpdword) : dword;
stdcall; 외부 'rasapi32.dll'name 'rasenumdevicesa';
기능 rascreatephonebookentry (
핸들 : hwnd; lpszphonebook : pchar) : dword;
stdcall; 외부 'rasapi32.dll'이름 'rascreatephonebookentrya';
함수 rasdeleteentry (
lpszphonebook : pchar;
lpszentry : pchar) : dword;
stdcall; 외부 'rasapi32.dll'name 'rasdeleteentrya';