已创建的VPN连接,调用,断开
来源:互联网 发布:铋晶体价格淘宝 编辑:程序博客网 时间:2024/04/28 20:01
unit u_publicDefine;
interface
Uses WinTypes, WinProcs, Dialogs,SysUtils,Forms,Controls;
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;
RDEOPT_IgnoreModemSpeaker = $00000004;
Type
HRASConn = DWORD;
{ 确认一活动的拨号连接. (为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;
PRASDIALEXTENSIon__S= ^TRASDIALEXTENSION__S;
TRASDIALEXTENSIon__S= 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 : PRASDIALEXTENSION__S ; //在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;
function ConnectionToInterNet(const VpnName,UserName,Password,Phone,Domain:string;bSpeaker:Boolean=False):Boolean;
Function Disconnection():Boolean;
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';
////////////////////////////
///功能:连接VPN
///输入参数:
/// 1、VpnName VPN名称
/// 2、UserName 用户名
/// 3、Password 密码
/// 4、Phone 电话号码(应该为空)
/// 5、Domain 域
/// 6、bSpeaker 忽略拨号音
///返回参数:为空则连接成功,否则连接失败
////////////////////////////
function ConnectionToInterNet(const VpnName,UserName,Password,Phone,Domain:string;bSpeaker:Boolean=False):Boolean;
var
hRas: HRasConn;
DialParams: PRasDialParams;
Extensions: PRASDialExtension__s;
Value: Integer;
C: array [0..255] of Char;
begin
Screen.Cursor:=crHourglass;
Result:=False;
New(DialParams);
try
Extensions:=nil;
if Not bSpeaker then {忽略拨号音}
begin
New(Extensions);
Extensions^.dwSize := SizeOf(TRASDialExtension__s);
Extensions^.dwfOptions := RDEOPT_IgnoreModemSpeaker;
end;
FillChar(Dialparams^, SizeOf(TRasDialParams), 0);
with Dialparams^ do
begin
dwSize := Sizeof(TRasDialParams);
StrPCopy(szEntryName,VpnName);
StrPCopy(szUserName,UserName);
StrPCopy(szPassword,Password);
//StrPCopy(szPhoneNumber,Phone);
if Domain<>'' then StrPCopy(szDomain, Domain);
end;
hRas := 0;
Value := RasDial(Extensions,nil,dialparams,0,0,hRas);
if Value <> 0 then
begin
Result := False;
RasGetErrorString(Value,C,255);
RasHangUp(hRas);
ShowMessage('VPN连接失败,错误信息如下:'+ string(C));
end;
if not bSpeaker then dispose(Extensions);
finally
Dispose(DialParams);
Result := Value = 0;
Screen.Cursor := crDefault;
end;
end;
////////////////////////////
///功能:断开VPN
///
///返回参数:为空则连接成功,否则连接失败
////////////////////////////
Function Disconnection():Boolean;
var
conn:array[0..100] of TRASConn;
c,S :Dword;
i,j:integer;
state : TRASConnStatus;
P :PRASConn;
H : HRASConn;
begin
Result:=True;
conn[1].dwSize := SIZEOF(TRasConn);
c := SIZEOF(TRasConn)*100;
FillChar(state,sizeof(TRasConnStatus),100);
state.dwSize := sizeof(TRasConnStatus);
if RasEnumConnections(@conn[1],c,S) = 0 then
begin
if s > 0 then
with conn[1] do
begin
P := pointer(rasconn);
H := Longint(P);
if RasHangUp(H) <> 0 then
begin
Result:=False;
ShowMessage('VPN断开连接失败');
end
//else ShowMessage('断开成功');
end;
end;
end;
end.
end.
- 已创建的VPN连接,调用,断开
- 已创建的VPN连接,调用,断开
- vpn创建连接脚本,断开连接脚本
- 北邮初次使用连接“VPN连接已断开”问题
- VMRC 控制台的连接已断开
- 正确释放WORD对象(COM组件) COMException: 被调用的对象已与其客户端断开连接
- Mac 下连接PPTP的VPN,一连上就断开
- 关于“远程桌面连接已断开”问题的处理(转)
- 强制断开sql server数据库已有连接的方法
- 关于“远程桌面连接已断开”问题的处理(转)
- Sql Server 强制断开数据库已有连接的方法
- Window dos 命令 连接断开VPN
- 如何创建VPN的拨号连接
- [AHK] 两个快捷键搞定Cisco VPN Client的连接与断开
- 远程会话已断开连接,因为访问被拒绝导致许可证存储的创建失败。请使用提升的权限运行远程桌面客户端
- 如何判断socket已断开连接
- 解决:vpn连接正常连接,本地连接断开问题
- MySQL的连接断开
- Javascript 转换UTC格式的日期时间为常见的日期字符串
- 显示桌面的困惑,不响应“显示桌面”(ToggleDesktop)
- java调用存储过程
- php基础------常量
- Hacking Windows CE: 如何从线程ID获取线程名称
- 已创建的VPN连接,调用,断开
- 设计模式
- PROTEL/PADS/ALLEGROPCB设计软件QQ学习群
- 使用ini文件
- Bloom Filter概念和原理
- (转)ASP.Net邮件发送类
- list 容器 排序函数
- 关键字
- web.py session 应用