?? 在delphi程序管理撥號網絡 (2000年8月21日).txt
字號:
function RasSetEntryDialParams;external RasApiDll name 'RasSetEntryDialParamsA';
參數pRASDIALPARAMS的說明同RasGetEntryDialParams.
參數lpfPassword的含義與RasGetEntryDialParams不同,在此表示是否刪除用戶密碼,為
TRUE時將原來的用戶密碼刪除.
函數返回值為0表示執行成功;否則為錯誤代碼.
下面是一個應用例子,設置指定撥號連接的撥號參數.
var
dwResult : DWORD;
RASDIALPARAMSData : RASDIALPARAMS;
RemovePWD : WordBool;
begin
//指定撥號連接的撥號參數
with RASDIALPARAMSData do
begin
dwSize := sizeof( RASDIALPARAMS );//結構大小
szEntryName := '163';//指定撥號連接的名稱
szUserName := 'MyName';//指定用戶名稱
szPassword := 'MyPassword';//指定用戶密碼
szDomain := 'MyDomain';//指定域名
szCallbackNumber := '';//指定回叫號碼
szPhoneNumber := '';//指定撥號號碼
end;
RemovePWD := false;//不需要刪除用戶密碼
//設置指定撥號連接的撥號參數
dwResult := RasSetEntryDialParams( '',@RASDIALPARAMSData,RemovePWD );
if dwResult <> 0 then //設置指定撥號連接的撥號參數失敗
memo1.lines.add( '設置'+StrPAS(RASDIALPARAMSData.szEntryName )+'撥號參數失敗:'
+ GetRasError( dwResult ))
else
begin//顯示指定撥號連接的撥號參數
memo1.lines.add( StrPAS(RASDIALPARAMSData.szEntryName )+'撥號參數設置成功');
memo1.lines.add( '用戶名稱:' + StrPAS(RASDIALPARAMSData.szUserName ));
memo1.lines.add( '用戶密碼:' + StrPAS(RASDIALPARAMSData.szPassword ));
memo1.lines.add( '域 名:' + StrPAS(RASDIALPARAMSData.szDomain ));
memo1.lines.add( '回叫號碼:' + StrPAS(RASDIALPARAMSData.szCallbackNumber ));
memo1.lines.add( '撥號號碼:' + StrPAS(RASDIALPARAMSData.szPhoneNumber ));
end;
end;
四、用指定的撥號連接撥號、掛斷指定的撥號連接
1、用指定的撥號連接撥號
撥號有兩種方法,一種是調用撥號網絡中的撥號程序,就象用戶自己用鼠標雙擊撥號連接名稱一
樣,用戶可以修改撥號號碼、用戶名稱和用戶密碼,最后由撥號網絡來完成撥號過程;另一個方法則
是調用RasAPI函數.
(1)用撥號網絡中的撥號程序
在程序中可以用如下代碼:
winexec('rundll32.exe rnaui.dll,RnaDial 169',SW_SHOWNORMAL);
其中字符串中的最后一個參數“169”為撥號連接的名稱。
(2)用RasAPI函數撥號
用撥號連接撥號的RasAPI函數為RasDial,其函數原型為:
function RasDial(
pRasDialExtensions : LPRASDIALEXTENSIONS;//在WIN9X下無用,可設置為NIL
lpszPhonebook : PChar;//電話本名稱,在Win9X下無作用,可為空字符串
lpRasDialParams : LPRASDIALPARAMS;//撥號參數
dwNotifierType : DWORD;//消息通知方式
handle : TRasDialFunc;//消息處理事件
var lphRasConn : DWORD//返回的成功連接的連接句柄
) : DWORD; stdcall;
function RasDial;external RasApiDll name 'RasDialA';
參數pRASDIALPARAMS的說明同RasGetEntryDialParams.
參數dwNotifierType表示消息通知方式.在撥號過程中,系統發出撥號事件消息可以通知撥號
進度,因而需要提供接受消息的方式和處理消息的函數.當其值為$FFFFFFFF時,則參數handle被
視為一個窗口的句柄,事件消息被發生該窗口處理;當其值為0時,handle被視為TRasDialFunc類型
的函數的指針;當其值為1時,handle被視為TRasDialFunc1類型的函數的指針.
參數handle表示消息處理函數指針,其類型可以THandle、TRasDialFunc、TRasDialFunc1.當該
參數不為NULL或NIL時,其代表的消息處理函數指針將接受撥號進度通知消息;為NIL時,撥號過程由
異步方式變為同步方式,直到撥號過程成功或失敗后RasDial函數才返回.詳細可參見Delphi幫助文件
中關于RasDial函數的幫助。
當撥號連接成功時,lphRasConn將表示其連接句柄.
函數返回值為0表示執行成功;否則為錯誤代碼.
下面是一個應用例子,按指定的撥號參數撥號.
var
RASDIALPARAMSData : RASDIALPARAMS;
dwResult : DWord;
RasCon : DWord;
begin
//指定撥號連接的撥號參數
with RASDIALPARAMSData do
begin
dwSize := sizeof( RASDIALPARAMS );//結構大小
szEntryName := '163';//指定撥號連接的名稱
szUserName := 'MyName';//指定用戶名稱
szPassword := 'MyPassword';//指定用戶密碼
szDomain := 'MyDomain';//指定域名
szCallbackNumber := '';//指定回叫號碼
szPhoneNumber := '';//指定撥號號碼
end;
//用指定的撥號參數撥號,采用同步撥號方式
dwResult := RasDial( NIL,'',@RASDIALPARAMSData,0,NIL,RasCon );
if dwResult <> 0 then //設置指定撥號連接的撥號參數失敗
memo1.lines.add( '用'+StrPAS(RASDIALPARAMSData.szEntryName )+'撥號失敗:'
+ GetRasError( dwResult ))
else
memo1.lines.add( '用'+StrPAS(RASDIALPARAMSData.szEntryName )+'撥號成功!' );
end;
2、掛斷指定的撥號連接
掛斷撥號連接的RasAPI函數為RasHangUp,其函數原型為:
function RasHangUp(
hRasConn : DWORD//要掛斷的撥號連接的句柄
) : DWORD; stdcall;
function RasHangUp;external RasApiDll name 'RasHangUpA';
函數返回值為0表示執行成功;否則為錯誤代碼.
下面是一個應用例子,掛斷由RasDial建立的撥號連接.
//掛斷由RasDial建立的撥號連接
dwResult := RasHangUp( RasCon );
if dwResult <> 0 then //掛斷失敗
memo1.lines.add( '掛斷失敗:' + GetRasError( dwResult ))
else
memo1.lines.add( '掛斷成功!');
五、獲取當前活動的連接及其連接狀態
1、獲取當前活動的連接
獲取當前活動的連接的RasAPI函數為RasEnumConnections,其函數原型為:
function RasEnumConnections( var lprasconn : RASCONN ;//接收活動連接的緩沖區的指針
var lpcb: DWORD;//緩沖區大小
var lpcConnections : DWORD//實際的活動連接數
) : DWORD; stdcall;
function RasEnumConnections;external RasApiDll name 'RasEnumConnectionsA';
參數lprasconn提供了一個RASCONN類型數組的指針,指向一個接收活動連接的緩沖
區,其中RASCONN的類型說明如下:
RASCONN = record
dwSize : DWORD;//該結構所占內存的大小(Bytes),一般設置為SizeOf(RASCONN)
hrasconn : HRASCONN;//活動連接的句柄
szEntryName : array[0..RAS_MaxEntryName] of char;//活動連接的名稱
szDeviceType : array[0..RAS_MaxDeviceType] of char;//活動連接的所用的設備類型
szDeviceName : array[0..RAS_MaxDeviceName] of char;//活動連接的所用的設備名稱
end;
參數lpcb為緩沖區大小(Bytes).
參數lpcConnections將返回實際的連接數目.
函數返回值為0表示執行成功;否則為錯誤代碼.
2、獲取指定連接的連接狀態
獲取指定連接的連接狀態的RasAPI函數為RasGetConnectStatus,其函數原型為:
function RasGetConnectStatus(
hrasconn : HRASCONN; //指定活動連接的句柄
lprasconnstatus : LPRASCONNSTATUS//連接狀態參數
) : DWORD; stdcall;
function RasGetConnectStatus;external RasApiDll name 'RasGetConnectStatusA';
連接狀態參數lprasconnstatus是一個RASCONNSTATUS類型的指針,將返回連接狀態參數.
RASCONNSTATUS和LPRASCONNSTATUS的類型說明如下:
LPRASCONNSTATUS = ^RASCONNSTATUS;
RASCONNSTATUS = record
dwSize : DWORD;//該結構所占內存的大小(Bytes),一般設置為SizeOf(RASCONNSTATUS)
rasconnstate : RASCONNSTATE;//連接狀態標識,一組DWORD類型數值的集合。
dwError : DWORD;//錯誤類型標識符
szDeviceType : array[0..RAS_MaxDeviceType] of char;//活動連接的所用的設備類型
szDeviceName : array[0..RAS_MaxDeviceName] of char;//活動連接的所用的設備名稱
end;
函數返回值為0表示執行成功;否則為錯誤代碼.
下面是一個應用例子,列出了當前系統中活動的連接的名稱及其連接狀態.
注意,應在RASCONN緩沖區的第一個RASCONN結構中設置dwSize.
const
MaxConnections = 10;//最多的撥號連接數目
var
connections : array[0..MaxConnections-1] of RASCONN;
longSize : dword;
intAvailabelConnections : dword;
intIndex : integer;
dwResult : DWORD;
strTemp : string;
RASCONNSTATUSData : RASCONNSTATUS;
begin
connections[ 0 ].dwSize := sizeof(RASCONN);//結構的大小
longSize := MaxConnections * connections[ 0 ].dwSize;//緩沖區大小
intAvailabelConnections := 0;//實際的活動連接的數目
//獲取當前系統中活動的連接
dwResult := RasEnumConnections( connections[ 0 ], longSize,intAvailabelConnections );
if dwResult <> 0 then //獲取當前系統中活動的連接
memo1.lines.add( '獲取當前系統中活動的連接:' + GetRasError( dwResult ))
else
begin
memo1.lines.add( '當前系統中活動的連接' + inttostr( intAvailabelConnections )
+ '個,列舉如下' );
for intIndex := 0 to intAvailabelConnections - 1 do
begin
strTemp := '連接名稱:' + StrPAS( connections[ intIndex ].szEntryName )
+ ' 設備類型:' + StrPAS( connections[ intIndex ].szDeviceType )
+ ' 設備名稱:' + StrPAS( connections[ intIndex ].szDeviceName );
//獲取連接狀態
dwResult := RasGetConnectStatus( connections[ intIndex ].hRasConn,@RASCONNSTATUSData );
if 0 <> dwResult then
strTemp := strTemp + ' 連接狀態未知:' + GetRasError( dwResult )
else if RASCONNSTATUSData.rasconnstate = RASCS_Connected then
strTemp := strTemp + ' 連接狀態:已連接'
else
strTemp := strTemp + ' 連接狀態:(' +
inttostr(RASCONNSTATUSData.rasconnstate)+')';
memo1.lines.add( strTemp );
end;
end;
end;
以上程序在PWIN98+Delphi3.0下調試通過。
作者:深圳王發軍
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -