在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.dwSize := SizeOf(TRasConn);
bufsize := SizeOf(TRasConn) * 10;
FillChar(stat, Sizeof(TRasConnStatus), 0);
stat.dwSize := Sizeof(TRasConnStatus);
if RasEnumConnections(@entries, bufsize, numEntries) = 0 then
begin
if numEntries > 0 then
with entries 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;//设备名称最大长度