亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

Delphi的撥號連接類

2019-11-18 18:15:31
字體:
來源:轉載
供稿:網友

前一陣因為工作需要寫了一個類來進行windows撥號,整理了一下,多封裝了幾個windows ras api,放上來大家提提意見?,F在支持讀取windows撥號連接列表、撥號、掛斷、創建/刪除連接,可以適用98/2000/XP,windows me 和NT沒測試過,想來應該是可以的。以后有時間寫成component,加入對撥號事件的支持。

uses
  ras, Classes, SysUtils, StrUtils, Windows, Forms;

type
  ERasError = Exception;

type
  TRASConnection = class
  PRivate
    FPlatForm: integer;
    FConnected: Boolean;
    FRasEntries: TStringList;
    FRasConn: HRASCONN;
    FParams: RasDialParams;
    Ferrno: integer;
    function GetPassWord: string;
    procedure SetPassword(Password: string);
    function GetPhoneNo: string;
    procedure SetPhoneNo(Number: string);
    function GetCallBack: string;
    procedure SetCallBack(Number: string);
    function GetDomain: string;
    procedure SetDomain(Domain: string);
    function GetUserName: string;
    procedure SetUserName(UserName: string);
    function GetEntryName: string;
    procedure SetEntryName(Entry: string);
    function GetConnected: Boolean;
    procedure SetConnected(AValue: Boolean);
    function GetRasEntries: TStringList;
  public
    property RasEntries: TStringList read GetRasEntries;
    property PhoneNumber: string read GetPhoneNo write SetPhoneNo;
    property CallBackNumber: string read GetCallBack write SetCallBack;
    property Domain: string read GetDomain write SetDomain;
    property EntryName: string read GetEntryName write SetEntryName;
    property username: string read GetUsername write SetUsername;
    property password: string read GetPassword write SetPassword;
    property Active: Boolean read GetConnected write SetConnected;
    procedure Connect;
    procedure DisConnect;
    function GetErrorCode: integer;
    procedure FreeAndHangup;
    constructor Create; reintroduce;
    destructor Destroy; override;
    procedure CreateRasEntry;
    procedure DeleteRasEntry(AEntryName: string);
      //function GetErrorReason: integer;
  end;

implementation

{ TRASConnection }

procedure TRASConnection.Connect;
var
  i: integer;
  s: string;
begin
  FParams.dwSize := sizeof(RasDialParams);
  i := RasDial(nil, nil, @FParams, 0, nil, @FRasConn);
  if i <> 0 then begin
    Ferrno := i;
    case i of
      691: s := '身分驗證失敗!';
      692: s := '打開端口失敗!';
      676: s := '線路忙,請稍候再撥!';
      677: s := '語音響應錯誤!';
      678: s := '沒有應答!';
      679: s := '無載波信號!';
      680: s := '無撥號音!';
    else
      s := '未知錯誤!';
    end;
    RasHangUp(FRasConn);
    raise ERasError.Create(s);
  end
  else FConnected := True;
end;

procedure TRASConnection.DisConnect;
begin
  RasHangup(FRasConn);
  FRasConn := 0;
end;

function TRASConnection.GetCallBack: string;
begin
  Result := string(FParams.szCallbackNumber);
end;

function TRASConnection.GetConnected: Boolean;
var
  i, len, num: integer;
  x: array of RASCONN;
begin
  Result := False;
  SetLength(x, 1);
  x[0].dwSize := sizeof(RASCONN);
  len := x[0].dwSize;
  num := 0;
  RasEnumConnections(@x[0], @len, @num);
  if num > 0 then begin
    SetLength(x, num);
    x[0].dwSize := sizeof(RASCONN);
    len := x[0].dwSize; num := 0;
    RasEnumConnections(@x[0], @len, @num);
    for i := 1 to num do
      if StrComp(x[i - 1].szEntryName, PChar(EntryName)) = 0 then begin
        FRasConn := x[i - 1].hrasconn;
        Result := True;
        Break;
      end;
  end;
  SetLength(x, 0);
end;

function TRASConnection.GetDomain: string;
begin
  Result := string(FParams.szDomain);
end;

function TRASConnection.GetErrorCode: integer;
begin
  Result := FErrno;
end;

function TRASConnection.GetPassword: string;
begin
  Result := '**********';
end;

function TRASConnection.GetPhoneNo: string;
begin
  Result := string(FParams.szPhoneNumber);
end;

function TRASConnection.GetEntryName: string;
begin
  Result := string(FParams.szEntryName);
end;

function TRASConnection.GetUserName: string;
begin
  Result := string(FParams.szUserName);
end;

procedure TRASConnection.SetCallBack(Number: string);
begin
  StrLCopy(FParams.szCallbackNumber, PChar(Number), sizeof(FParams.szCallbackNumber) - 1);
end;

procedure TRASConnection.SetConnected(AValue: Boolean);
begin
  if AValue and not GetConnected then Connect
  else if not AValue and GetConnected then DisConnect;
end;

procedure TRASConnection.SetDomain(Domain: string);
begin
  StrLCopy(FParams.szDomain, PChar(Domain), sizeof(FParams.szDomain) - 1);
end;

procedure TRASConnection.SetPassword(Password: string);
begin
  StrLCopy(FParams.szPassword, PChar(Password), sizeof(FParams.szPassword) - 1);
end;

procedure TRASConnection.SetPhoneNo(Number: string);
begin
  StrLCopy(FParams.szPhoneNumber, PChar(Number), sizeof(FParams.szPhoneNumber) - 1);
end;

procedure TRASConnection.SetEntryName(Entry: string);
var
  i: integer;
begin
  for i := 0 to FRasEntries.Count - 1 do
    if FRasEntries.Strings[i] = Entry then begin
      StrCopy(FParams.szEntryName, PChar(Entry));
      Exit;
    end;
  StrCopy(FParams.szEntryName, '');
end;

procedure TRASConnection.SetUserName(UserName: string);
begin
  StrLCopy(FParams.szUserName, PChar(UserName), sizeof(FPArams.szUserName) - 1);
end;

procedure TRASConnection.FreeAndHangup;
begin
  if Active then DisConnect;
  Free;
end;

function TRASConnection.GetRasEntries: TStringList;
var
  ren: array of RASEntryName;
  ren98: array of RASEntryName98;
  c, l: integer;
begin
  FRasEntries.Clear;
  c := 0;
  case FPlatForm of
  VER_PLATFORM_WIN32_WINDOWS:
    begin
      setlength(ren98, 1);
      ren98[0].dwSize := sizeof(RASENTRYNAME98);
      l := sizeof(RASENTRYNAME98);
      if RasEnumEntries(nil, nil, @ren98[0], @l, @c) = ERROR_BUFFER_TOO_SMALL then begin
        setlength(ren, c);
        RasEnumEntries(nil, nil, @ren98[0], @l, @c);
      end;
      while c > 0 do begin
        FRasEntries.Add(string(ren98[c - 1].szEntryName));
        Dec(c);
      end;
      SetLength(ren98, 0);
    end;
  VER_PLATFORM_WIN32_NT:
    begin
      setlength(ren, 1);
      ren[0].dwSize := sizeof(RASENTRYNAME);
      l := sizeof(RASENTRYNAME);
      if RasEnumEntries(nil, nil, @ren[0], @l, @c) = ERROR_BUFFER_TOO_SMALL then begin
        setlength(ren, c);
        RasEnumEntries(nil, nil, @ren[0], @l, @c);
      end;
      while c > 0 do begin
        FRasEntries.Add(string(ren[c - 1].szEntryName));
        Dec(c);
      end;
      SetLength(ren, 0);
    end;
  end;
  if FRasEntries.Count>0 then EntryName:=FRasEntries.Strings[0];
  Result := FRasEntries;
end;

constructor TRASConnection.Create;
var
  OS: OSVersionInfoA;
begin
  inherited;
  OS.dwOSVersionInfoSize:=sizeof(OSVersionInfoA);
  GetVersionEx(OS);
  FPlatForm:=OS.dwPlatformId;
  FRasEntries := TStringList.Create;
  GetRasEntries;
end;

destructor TRASConnection.Destroy;
begin
  FRasEntries.Free;
  inherited;
end;

procedure TRASConnection.CreateRasEntry;
begin
  RasCreatePhonebookEntry(application.Handle,nil);
end;

procedure TRASConnection.DeleteRasEntry(AEntryName: string);
var
  i: integer;
begin
  i:=FRasEntries.IndexOf(AEntryName);
  if i=-1 then Exit;
  FRasEntries.Delete(i);
  if AEntryName=EntryName then
    if FRasEntries.Count>0 then EntryName:=FRasEntries.Strings[0]
    else EntryName:='';
  RasDeleteEntry(nil,PChar(AEntryName));
end;

Api聲明:

function RasDial(
  lpRasDialExtensions: PRASDIALEXTENSIONS;
  lpszPhonebook: LPCTSTR;
  lpRasDialParams: LPRASDIALPARAMS;
  dwNotifierType: DWORD;
  lpvNotifier: Pointer;
  lphRasConn: LPHRASCONN): DWORD;
stdcall; external 'RASAPI32.dll' name 'RasDialA';

function RasHangUp(rasconn: HRASCONN): DWORD;
stdcall; external 'RASAPI32.dll' name 'RasHangUpA';

function RasGetEntryDialParams(
  lpszPhonebook: LPCTSTR;
  lprasdialparams: LPRASDIALPARAMS;
  lpfPassword: LPBOOL): DWORD;
stdcall; external 'RASAPI32.dll' name 'RasGetEntryDialParamsA';

function RasEnumEntries(
  reserved: LPCTSTR;
  lpszPhonebook: LPCTSTR;
  lprasentryname: LPRASENTRYNAME;
  lpcb: LPDWORD;
  lpcEntries: LPDWORD): DWORD;
stdcall; external 'RASAPI32.dll' name 'RasEnumEntriesA';

function RasEditPhonebookEntry(
  hwnd: HWND;
  lpszPhonebook: LPCTSTR;
  lpszEntryName: LPCTSTR): DWORD;
stdcall; external 'RASAPI32.dll' name 'RasEditPhonebookEntryA';

function RasGetEntryProperties(
  lpszPhonebook: LPCTSTR;
  lpszEntry: LPCTSTR;
  lpRasEntry: LPRASENTRY;
  lpdwEntryInfoSize: LPDWORD;
  lpbDeviceInfo: PBYTE;
  lpdwDeviceInfoSize: LPDWORD): DWORD;
stdcall; external 'RASAPI32.dll' name 'RasGetEntryPropertiesA';

function RasSetEntryProperties(
  lpszPhonebook: LPCTSTR;
  lpszEntry: LPCTSTR;
  lpRasEntry: LPRASENTRY;
  dwEntryInfoSize: DWORD;
  lpbDeviceInfo: PByte;
  dwDeviceInfoSize: DWORD): DWORD;
stdcall; external 'RASAPI32.dll' name 'RasSetEntryPropertiesA';

function RasEnumConnections(
  lprasconn: LPRASCONN;
  lpcb: LPDWORD;
  lpcConnections: LPDWORD): DWORD;
stdcall; external 'RASAPI32.dll' name 'RasEnumConnectionsA';

function RasEnumDevices(
  lpRasDevInfo: LpRasDevInfo;
  lpcb: LPDWORD;
  lpcdevices: LPDWORD): DWORD;
stdcall; external 'RASAPI32.dll' name 'RasEnumDevicesA';

function RasCreatePhonebookEntry(
  Handle: Hwnd; LpszPhoneBook: PChar): DWORD;
stdcall; external 'RASAPI32.dll' name 'RasCreatePhonebookEntryA';

function RasDeleteEntry(
  lpszPhonebook: PChar;
  lpszEntry: PChar): DWORD;
stdcall; external 'RASAPI32.dll' name 'RasDeleteEntryA';

 


上一篇:Delphi使用方法

下一篇:Delphi異常處理的基本原則和方法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人成绝费网站色www| 亚洲国产日韩欧美在线动漫| 色噜噜狠狠狠综合曰曰曰88av| 欧美国产视频一区二区| 欧美激情久久久久| 日韩欧亚中文在线| 91干在线观看| 一本大道亚洲视频| 久久久久久久999精品视频| 国产一区欧美二区三区| 亚洲天堂网站在线观看视频| 亚州欧美日韩中文视频| 日韩av在线最新| 国产视频久久久| 疯狂做受xxxx欧美肥白少妇| 日韩一区av在线| 亚洲成人免费在线视频| 亚洲欧美日韩中文在线| 日韩大陆欧美高清视频区| 亚洲最大的成人网| 色综合伊人色综合网站| 精品久久久视频| 午夜欧美大片免费观看| 国产精品第8页| 中文字幕在线看视频国产欧美| 欧美激情免费视频| 色综合老司机第九色激情| 91久久久久久久久久久| 国产精品美女久久久免费| 亚洲国产精彩中文乱码av在线播放| 亚洲国产精品免费| 亚洲精品98久久久久久中文字幕| 亚洲国产日韩欧美在线图片| 69国产精品成人在线播放| 国产精品久久久久久亚洲调教| 热久久美女精品天天吊色| 国产日本欧美一区| 久久久久久午夜| 欧美日韩成人精品| 一区二区三区国产视频| 欧美亚洲国产视频小说| 亚洲综合成人婷婷小说| 国产不卡av在线免费观看| 亚洲另类欧美自拍| 国产福利成人在线| 国产午夜精品免费一区二区三区| 麻豆精品精华液| 不卡av在线网站| 国产成人中文字幕| 日韩电影在线观看永久视频免费网站| 国产精品青青在线观看爽香蕉| 国产激情999| 欧美日韩电影在线观看| 国产精品香蕉国产| 久久天天躁夜夜躁狠狠躁2022| y97精品国产97久久久久久| 91wwwcom在线观看| 欧美午夜激情在线| 性欧美办公室18xxxxhd| 欧美日韩高清区| 久久九九精品99国产精品| 国产成人激情小视频| 日韩av在线一区| 久久久久久久一区二区| 91九色国产在线| 精品亚洲一区二区三区四区五区| www.欧美精品一二三区| 中文字幕精品一区二区精品| 亚洲自拍在线观看| 久久成年人视频| 亚洲国产欧美一区二区三区久久| 欧美激情2020午夜免费观看| 日韩av大片在线| 亚洲欧美日韩国产中文| 中文字幕日韩专区| 亚洲天堂男人天堂| 亚洲欧洲国产伦综合| 色悠久久久久综合先锋影音下载| 成人午夜激情免费视频| 久久久国产视频| 久久精品国产一区| 国内自拍欧美激情| 成人久久18免费网站图片| 91久久久久久久久久久| 在线亚洲国产精品网| 一区二区三区四区精品| 国产精品久久久久久久久粉嫩av| 91久久久久久久一区二区| 欧美性在线视频| 91久久在线播放| 91精品国产91久久久久福利| 亚洲18私人小影院| 97久久精品视频| 欧美黄色片在线观看| 国产精品成人国产乱一区| 国产精品影片在线观看| 亚洲另类图片色| 日韩午夜在线视频| 日韩精品免费视频| 97色在线播放视频| 97国产精品视频| 热久久这里只有精品| 中文字幕不卡在线视频极品| 国产免费亚洲高清| 91精品久久久久久久久中文字幕| 中文字幕免费精品一区| 中文字幕国内精品| 最新中文字幕亚洲| 亚洲免费视频一区二区| 亚洲精品99999| 欧美激情2020午夜免费观看| 精品国偷自产在线| 97超视频免费观看| 欧美日韩在线影院| 亚洲精品久久久久中文字幕欢迎你| 黄色成人av在线| 欧美激情精品久久久久| 日本欧美黄网站| 国产成人精品日本亚洲专区61| 热99精品里视频精品| 国产日韩视频在线观看| 日韩中文字幕在线播放| 亚洲成色777777在线观看影院| 欧美高清理论片| 不卡伊人av在线播放| 亚洲电影免费观看高清| 中文字幕av一区二区| 欧美尤物巨大精品爽| 狠狠躁夜夜躁人人爽超碰91| 久久综合亚洲社区| 一区国产精品视频| 日韩成人激情在线| 久久99精品久久久久久青青91| 欧美成人一二三| 狠狠色香婷婷久久亚洲精品| 国产区精品视频| 亚洲欧美一区二区三区情侣bbw| 成人久久一区二区三区| 欧美电影免费观看高清| 亚洲精品97久久| 欧美视频不卡中文| 国产精品成人观看视频国产奇米| 欧美激情第99页| 日韩电视剧免费观看网站| 91久久国产精品91久久性色| 国产精品第8页| 美女久久久久久久| 黑人巨大精品欧美一区免费视频| 69视频在线播放| 国产精品夜色7777狼人| 尤物精品国产第一福利三区| 色与欲影视天天看综合网| 欧美在线欧美在线| 国模精品系列视频| 亚洲欧美制服综合另类| 欧美一区二区三区四区在线| 欧美日韩成人精品| 中文日韩电影网站| 色婷婷av一区二区三区久久| 欧美在线观看日本一区| 亚洲成人激情在线观看| 色综合久久久888| 亚洲午夜精品久久久久久性色| 精品国产网站地址|