麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

Delphi的撥號連接類

2019-11-18 18:15:31
字體:
供稿:網(wǎng)友

前一陣因?yàn)楣ぷ餍枰獙懥艘粋€類來進(jìn)行windows撥號,整理了一下,多封裝了幾個windows ras api,放上來大家提提意見?,F(xiàn)在支持讀取windows撥號連接列表、撥號、掛斷、創(chuàng)建/刪除連接,可以適用98/2000/XP,windows me 和NT沒測試過,想來應(yīng)該是可以的。以后有時間寫成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 := '身分驗(yàn)證失敗!';
      692: s := '打開端口失敗!';
      676: s := '線路忙,請稍候再撥!';
      677: s := '語音響應(yīng)錯誤!';
      678: s := '沒有應(yīng)答!';
      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異常處理的基本原則和方法

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 国产视频精品在线 | 韩国一级免费视频 | 国产69精品久久99不卡免费版 | 久久国产经典 | 黄色一级视频 | 成人午夜免费看 | 日韩一级片黄色 | 成人免费一区二区三区视频网站 | 一二区成人影院电影网 | 午夜视频免费播放 | av电影在线观看免费 | av在线免费播放网站 | 免费一级特黄毛片 | 成人nv在线观看 | 免费久久久久久 | 欧美14一15sex性hd| 激情综合在线 | 九九视频在线观看黄 | 禁漫天堂久久久久久久久久 | 欧美成人激情在线 | 免费a级毛片大学生免费观看 | 毛片免费视频 | a一级黄色毛片 | 免费a视频在线观看 | 99欧美视频 | 亚洲综合视频在线播放 | 91精品国产777在线观看 | 毛片视频免费观看 | 国产又粗又爽又深的免费视频 | 激情网站在线观看 | 久久人人爽人人爽人人片av高清 | 毛片一级网站 | 久久艳片 | 亚洲情在线 | 91 视频网站 | 免费在线观看午夜视频 | 一级成人欧美一区在线观看 | 国产日本欧美在线观看 | 911精品影院在线观看 | v片在线看 | 亚洲国产高清视频 |