用Delphi編寫可以斷開Internet連接的程式 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
此為轉貼資料 用Delphi編寫可以斷開Internet連接的程式 作者:陳學軍 來 源:賽迪網 (http://www.tommstudio.com/newclub30/) -------------------------------------------------------------------------------- 在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. *********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together!
希望能大家敞開心胸,將知識寶庫結合一起
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |