在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;