<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      用Delphi編寫可以斷開Internet連接的程序

      [摘要]在WIN9X下,如果安裝了撥號網絡,則在WINDOWS的系統目錄(System目錄)下將有兩個撥號網絡管理程序庫RasApi32.DLL 和RasApi16.DLL,因此我們可以利用RAS(遠程訪問...
      在WIN9X下,如果安裝了撥號網絡,則在WINDOWS的系統目錄(System目錄)下將有兩個撥號網絡管理程序庫RasApi32.DLL 和RasApi16.DLL,因此我們可以利用RAS(遠程訪問服務)系列函數實現斷開指定的撥號連接。在這里我們將使用RasHangUp函數。然而如何正確使用這些API函數是完成應用程序的關鍵。
        掛斷撥號連接的RasApi32函數為RasHangUp,其函數原型為:
        RasHangUp(
          HRASCONN : DWORD
         ):DWORD;stdcall;
        參數說明:
        HRASCONN : DWORD要掛斷的撥號連接的句柄,此句柄是來源由調用函數RasEnumConnections的返回值。
        返回值:函數的返回值為0表示執行成功;不為0執行失敗。
        由上面的函數得知:我們必須首先獲得撥號連接的句柄,因此在應用程序中還需使用RasEnumConnections函數。
        獲取所有活動的撥號連接的信息列表(連接句柄和電話號碼)的RasApi32函數為RasEnumConnections,其函數原型為:
        RasEnumConnections(LPRASCONN lprasconn,LPDWORD lpcb,LPDWORD lpcConnections) :DWORD;stdcall;
        參數說明:
        lprasconn:接收活動連接的緩沖區的指針;
        lpcb:接收緩沖區的字節大;
        lpcConnections:實際的活動連接數。
        返回值函數的返回值為0表示執行成功;不為0執行失敗。
        為了正確使用這兩個函數,我們要事先定義函數,常數,結構類型及其他信息,有關這一部份的內容都寫入rasapi.pas單元。
        源程序:
        program main;

        uses

         Forms,
         Unit1 in 'Unit1.pas' {Form1},
         rasapi in 'rasapi.pas';

        {$R *.RES}

        begin
         Application.Initialize;
         Application.CreateForm(TForm1, Form1);
         Application.Run;
        end.

        unit Unit1;

        interface

        uses

         Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
         StdCtrls, DdeMan;

        type

         TForm1 = class(TForm)
          Button1: TButton;
          procedure Button1Click(Sender: TObject);
         private
          { Private declarations }
           public
          { Public declarations }
         end;

        var

         Form1: TForm1;

        implementation

         uses rasapi;

        {$R *.DFM}

        procedure TForm1.Button1Click(Sender: TObject);
        var
           bufsize: Cardinal;
           numEntries: Cardinal;
           x: Integer;
           entries: Array[1..10] of TRasConn;//撥號連接數組(假設最多有10個活動的撥號連接)
           stat: TRasConnStatus;
           hRas: HRasConn;
           conexion:pRasConn;
         begin
          entries[1].dwSize := SizeOf(TRasConn);
          bufsize := SizeOf(TRasConn) * 10;
          FillChar(stat, Sizeof(TRasConnStatus), 0);
          stat.dwSize := Sizeof(TRasConnStatus);
          if RasEnumConnections(@entries[1], bufsize, numEntries) = 0 then
           begin
            if numEntries > 0 then
             with entries[1] do
             begin
              conexion:=Pointer(rasconn);
              hRas := Longint(conexion);
              if RasHangUp(hRas) <> 0 then
               ShowMessage('斷開失敗');
             end
             else
              ShowMessage('斷開成功');
             end;
         end;

        unit rasapi;

        interface

         Uses WinTypes, WinProcs, Dialogs;

         Const

         UNLEN = 256;
         PWLEN = 256;
         DNLEN = 15;
         RAS_MaxEntryName   = 256;//連接名稱最大長度
         RAS_MaxDeviceName   = 128;//設備名稱最大長度
         RAS_MaxDeviceType   = 16;//設備類型名稱長度
         { RAS_MaxParamKey   = 32;
         RAS_MaxParamValue   = 128;}
         RAS_MaxPhoneNumber  = 128;//電話號碼的最大長度
         RAS_MaxCallbackNumber = RAS_MaxPhoneNumber;

         Type

         {UINT = Word;}
         PHRASConn = ^HRASConn;
         Type

         { 確認一活動的撥號連接. (為RasConnectEnum函數使用) }

         PRASConn = ^TRASConn;//撥號連接的句柄類型
         TRASConn = record
           dwSize: DWORD;//該結構類型所占內存的字節大小
           rasConn: HRASConn;//活動連接的句柄
           szEntryName: Array[0..RAS_MaxEntryName] Of Char;//
           szDeviceType : Array[0..RAS_MaxDeviceType] Of Char;
           szDeviceName : Array [0..RAS_MaxDeviceName] of char;
         end;

         PRASConnStatus = ^TRASConnStatus;
         TRASConnStatus = Record
           dwSize: LongInt;
           rasConnstate: Word;
           dwError: LongInt;
           szDeviceType: Array[0..RAS_MaxDeviceType] Of Char;
           szDeviceName: Array[0..RAS_MaxDeviceName] Of Char;
         End;

         PRASDIALEXTENSIONS= ^TRASDIALEXTENSIONS;

         TRASDIALEXTENSIONS= Record
           dwSize: DWORD;
           dwfOptions: DWORD;
           hwndParent: HWnd;
           reserved: DWORD;
          end;

         PRASDialParams = ^TRASDialParams;
         TRASDialParams = Record
           dwSize: DWORD;
           szEntryName: Array[0..RAS_MaxEntryName] Of Char;
           szPhoneNumber: Array[0..RAS_MaxPhoneNumber] Of Char;
           szCallbackNumber: Array[0..RAS_MaxCallbackNumber] Of Char;
           szUserName: Array[0..UNLEN] Of Char;
           szPassword: Array[0..PWLEN] Of Char;
           szDomain: Array[0..DNLEN] Of Char;
         end;

         PRASEntryName = ^TRASEntryName;

         TRASEntryName = Record
           dwSize: LongInt;
           szEntryName: Array[0..RAS_MaxEntryName] Of Char;
         {  Reserved: Byte;}
         End;

        //撥號函數

         Function RasDial(
           lpRasDialExtensions : PRASDIALEXTENSIONS ; //在WIN9X下無用,可設置為NIL
           lpszPhonebook: PChar; //在WIN9X下無用,可設置為NIL
           lpRasDialParams : PRASDIALPARAMS; // 撥號參數,類型指針
           dwNotifierType : DWORD;   { 消息通知方式}
           lpvNotifier: DWORD;    { 消息處理事件}
           var rasConn: HRASConn     { 返回成功連接的連接句柄}
          ): DWORD; stdcall;

         function RasEnumConnections(RASConn: PrasConn;
                  var BufSize: DWord;
               var Connections: DWord
          ): LongInt; stdcall;

         Function RasEnumEntries (
           reserved: PChar;    {保留字段,必須為空}
           lpszPhonebook: PChar ;    { 電話本名稱,在WIN9X下無用,可設置為NIL}
           lprasentryname: PRASENTRYNAME ; {接收撥號連接名稱的緩沖區,是一類型數組的指針}
           var lpcb :     DWORD; {接收撥號連接名稱的緩沖區的大小}
           var lpcEntries : DWORD  {實際獲得撥號連接 的數目}
          ) : DWORD; stdcall;

         function RasGetConnectStatus(RASConn: hrasConn;    { 指定活動連接的句柄 }
                 RASConnStatus: PRASConnStatus { 獲取活動連接狀態信息的緩沖區}
           ): LongInt; stdcall;

         function RasGetErrorString(ErrorCode: DWord;    { 錯誤代碼標識}
                      szErrorString: PChar;    { 錯誤提示信息的緩沖區}
                      BufSize: DWord   {錯誤提示信息的緩沖區的大小 }
                      ): LongInt; stdcall;

         function RasHangUp(RASConn: hrasConn ): LongInt; stdcall;

         function RasGetEntryDialParams(
           lpszPhonebook:PChar;    {電話本名稱,在WIN9X下無用,可設置為NIL }
           VAR lprasdialparams:TRASDIALPARAMS; {撥號參數,是一類型指針}
           VAR lpfPassword : BOOL    {顯示是否需要用戶密碼}
          ): DWORD; stdcall;

         implementation

         const

         RAS_DLL = 'RASAPI32';

         function RasDial; external RAS_DLL name 'RasDialA';

         function RasEnumConnections; external RAS_DLL name 'RasEnumConnectionsA';

         function RasEnumEntries; external RAS_DLL name 'RasEnumEntriesA';

         function RasGetConnectStatus; external RAS_DLL name 'RasGetConnectStatusA';

         function RasGetErrorString; external RAS_DLL name 'RasGetErrorStringA';

         function RasHangUp; external RAS_DLL name 'RasHangUpA';

         function RasGetEntryDialParams; external RAS_DLL name 'RasGetEntryDialParamsA';

        end.


        以上代碼在PWIN98+DELPHI5環境下調試通過。


      日韩精品一区二区三区高清