建一个FROM1文件
代码如下Private Const RAS95_MaxEntryName = 256
Private Const RAS95_MaxDeviceName = 128
Private Const RAS95_MaxDeviceType = 16Private Type RASCONN95
'set dwsize to 412
dwSize As Long '该结构所占内存的大小(Bytes)
hRasConn As Long '活动连接的句柄
szEntryName(RAS95_MaxEntryName) As Byte '活动连接的名称
szDeviceName(RAS95_MaxDeviceName) As Byte '活动连接的所用的设备名称
szDeviceType(RAS95_MaxDeviceType) As Byte '活动连接的所用的设备类型
End TypePrivate Declare Function RasEnumConnections Lib "rasapi32.dll" Alias "RasEnumConnectionsA" (lprasconn As Any, lpcb As Long, lpcConnections As Long) As LongPrivate lpchWnd As RASCONN95
Private lpcWidth As Long
Private lpcConnNum As Long
'----------------------------------------
'
'获得IP地址
Private Const ras_MaxIPAddress = 15Private Type RASPPPIP
dwSize As Long 'set dwsize to 40
dwError As Long
szIpAddress(ras_MaxIPAddress) As Byte
szServerAddress(ras_MaxIPAddress) As Byte
End TypePrivate Declare Function RasGetProjectionInfo Lib "rasapi32.dll" Alias "RasGetProjectionInfoA" ( _
ByVal hRasConn As Long, ByVal rasprojection As Long, lpprojection As RASPPPIP, lpcb As Long) As LongPrivate Const RASP_PppIp = &H8021
Private lpcPPPIP As RASPPPIP
Private lpcb As Long
'----------------------------------------------------------
Private Sub Form1_Load()
If RasEnumConnections(lpchWnd, lpcWidth, lpcConnNum) = 0 Then
If lpcConnNum > 0 Then
'lpcPPPIP.dwSize = 40 If RasGetProjectionInfo(lpchWnd.hRasConn, RASP_PppIp, lpcPPPIP, 40) = 0 Then
'**************************************************
Debug.Print StrConv(lpcPPPIP.szIpAddress, vbUnicode)
End If
End IfEnd If
End SubPrivate Sub Form_Load()
Me.Show
Dim Conns As Long '记录当前连接数
ReDim RasConn(255) As RASCONN95 '记录
Dim lRet As Long '接受枚举返回
Dim lSize As Long '数组总长度
Dim i As Long '循环变量
Dim j As Long '循环变量
'Dim Item As ListItem '列表项
RasConn(0).dwSize = 412
lSize = RasConn(0).dwSize * 255
lRet = RasEnumConnections(RasConn(0), lSize, Conns)
'排除枚举错
If lRet <> 0 Then Exit SubFor i = 0 To Conns - 1
List1.AddItem Replace(StrConv(RasConn(i).szEntryName, vbUnicode), Chr(0), "")
'lji = Replace(StrConv(RasConn(i).hRasConn, vbUnicode), Chr(0), "")
If RasGetProjectionInfo(RasConn(i).hRasConn, RASP_PppIp, lpcPPPIP, 40) <> 0 Then
'lpcPPPIP.dwSize = 40
tip = Replace(StrConv(lpcPPPIP.szIpAddress, vbUnicode), Chr(0), "")
End If
NextEnd Sub-----------------------------------------------------------------------------------------------------
For i = 0 To Conns - 1
List1.AddItem Replace(StrConv(RasConn(i).szEntryName, vbUnicode), Chr(0), "")
这个可以获得连接名称.
但怎么下面的
lpcPPPIP.szIpAddress
就得不到那个连接的IP地址呢?另附一些Delphi参考资料
代码如下Private Const RAS95_MaxEntryName = 256
Private Const RAS95_MaxDeviceName = 128
Private Const RAS95_MaxDeviceType = 16Private Type RASCONN95
'set dwsize to 412
dwSize As Long '该结构所占内存的大小(Bytes)
hRasConn As Long '活动连接的句柄
szEntryName(RAS95_MaxEntryName) As Byte '活动连接的名称
szDeviceName(RAS95_MaxDeviceName) As Byte '活动连接的所用的设备名称
szDeviceType(RAS95_MaxDeviceType) As Byte '活动连接的所用的设备类型
End TypePrivate Declare Function RasEnumConnections Lib "rasapi32.dll" Alias "RasEnumConnectionsA" (lprasconn As Any, lpcb As Long, lpcConnections As Long) As LongPrivate lpchWnd As RASCONN95
Private lpcWidth As Long
Private lpcConnNum As Long
'----------------------------------------
'
'获得IP地址
Private Const ras_MaxIPAddress = 15Private Type RASPPPIP
dwSize As Long 'set dwsize to 40
dwError As Long
szIpAddress(ras_MaxIPAddress) As Byte
szServerAddress(ras_MaxIPAddress) As Byte
End TypePrivate Declare Function RasGetProjectionInfo Lib "rasapi32.dll" Alias "RasGetProjectionInfoA" ( _
ByVal hRasConn As Long, ByVal rasprojection As Long, lpprojection As RASPPPIP, lpcb As Long) As LongPrivate Const RASP_PppIp = &H8021
Private lpcPPPIP As RASPPPIP
Private lpcb As Long
'----------------------------------------------------------
Private Sub Form1_Load()
If RasEnumConnections(lpchWnd, lpcWidth, lpcConnNum) = 0 Then
If lpcConnNum > 0 Then
'lpcPPPIP.dwSize = 40 If RasGetProjectionInfo(lpchWnd.hRasConn, RASP_PppIp, lpcPPPIP, 40) = 0 Then
'**************************************************
Debug.Print StrConv(lpcPPPIP.szIpAddress, vbUnicode)
End If
End IfEnd If
End SubPrivate Sub Form_Load()
Me.Show
Dim Conns As Long '记录当前连接数
ReDim RasConn(255) As RASCONN95 '记录
Dim lRet As Long '接受枚举返回
Dim lSize As Long '数组总长度
Dim i As Long '循环变量
Dim j As Long '循环变量
'Dim Item As ListItem '列表项
RasConn(0).dwSize = 412
lSize = RasConn(0).dwSize * 255
lRet = RasEnumConnections(RasConn(0), lSize, Conns)
'排除枚举错
If lRet <> 0 Then Exit SubFor i = 0 To Conns - 1
List1.AddItem Replace(StrConv(RasConn(i).szEntryName, vbUnicode), Chr(0), "")
'lji = Replace(StrConv(RasConn(i).hRasConn, vbUnicode), Chr(0), "")
If RasGetProjectionInfo(RasConn(i).hRasConn, RASP_PppIp, lpcPPPIP, 40) <> 0 Then
'lpcPPPIP.dwSize = 40
tip = Replace(StrConv(lpcPPPIP.szIpAddress, vbUnicode), Chr(0), "")
End If
NextEnd Sub-----------------------------------------------------------------------------------------------------
For i = 0 To Conns - 1
List1.AddItem Replace(StrConv(RasConn(i).szEntryName, vbUnicode), Chr(0), "")
这个可以获得连接名称.
但怎么下面的
lpcPPPIP.szIpAddress
就得不到那个连接的IP地址呢?另附一些Delphi参考资料
解决方案 »
- ActiveBar3.0两个问题CTRL C 和SETFOUCS问题
- 当Combo内容为数据库查询所得时,如何去掉多余的空格
- 高手区:如何获得引用的参数变量名
- 问题6
- 为什么我的程序窗口关了,可进程还在啊?
- ftp接收多个客户端上传文件,如何保证大家同时传输,在线...
- 紧急求助大师VB webbrowser中获取get返回消息
- 哪有2000和2001的高程程序设计专业试题下载,我没分了,只能谢谢谢谢大家了,这对我很重要
- 如何判断一个进程或EXE文件正在执行中
- Microsoft Visual Studio 2010连接的Access数据库,用vb.net存储数据还有可以调用查询Access的数据
- 如何实现一窗体有几种换肤功能呢?
- 跪求高人帮忙!毕业设计--远程控制!!
---- 一、先解释一些要用到的数据常量和数据结构。 const
RAS_MaxDeviceType = 16;//设备类型名称长度
RAS_MaxEntryName = 256;//连接名称最大长度
RAS_MaxDeviceName = 128;//设备名称最大长度
RAS_MaxIpAddress = 15;//IP地址的最大长度
RASP_PppIp = $8021;//拨号连接的协议类型,该数值表示PPP连接type
HRASCONN = DWORD;//拨号连接句柄的类型
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;
TRASPPPIP = record//活动的拨号连接的动态IP地址信息
dwSize : DWORD;//该结构所占内存的大小(Bytes),
一般设置为SizeOf(TRASPPPIP)
dwError : DWORD;//错误类型标识符
szIpAddress : array[ 0..RAS_MaxIpAddress ] of char;
//活动的拨号连接的IP地址
end;
---- 二、接着要解释要用到的两个RAS函数。 //获取所有活动的拨号连接的信息(连接句柄和设置信息)
function RasEnumConnections( var lprasconn : RASCONN ;
//接收活动连接的缓冲区的指针
var lpcb: DWORD;//缓冲区大小
var lpcConnections : DWORD//实际的活动连接数
) : DWORD; stdcall;
function RasEnumConnections;external 'Rasapi32.dll'
name 'RasEnumConnectionsA';
//获取指定活动的拨号连接的动态IP信息
function RasGetProjectionInfo(
hrasconn : HRasConn;//指定活动连接的句柄
rasprojection : DWORD;//RAS连接类型
var lpprojection : TRASPPPIP;//接收动态IP信息的缓冲区
var lpcb : DWord//接收缓冲区的大小
) : DWORD;stdcall;
function RasGetProjectionInfo;external
'Rasapi32.dll' name 'RasGetProjectionInfoA';
这两个函数的返回值为0时表示执行成功,非0表示错误代码。 ---- 三、下面要讨论如何用上面的两个RAS函数获取拨号连接的动态IP地址 ---- 首先,要用函数RasEnumConnections列出已建立的活动拨号连接的信息,其中包括连接名称、连接句柄、连接设备类型和设备名称;然后根据连接句柄用函数RasGetProjectionInfo获取连接对应的一个TRASPPPIP结构,其中包括一个成员属性szIpAddress即为动态IP地址。具体请参见以下程序片段和注释信息。 procedure TForm1.Button1Click(Sender: TObject);
const
MaxConnections = 10;//假设最多有10个活动的拨号连接
var
connections : array[0..MaxConnections-1] of RASCONN;
//拨号连接数组
longSize : dword;
intAvailabelConnections : dword;
//活动的拨号连接的实际数目
intIndex : integer;
strTemp : string;
dwResult : DWORD;
dwSize : DWORD;
RASpppIP : TRASPPPIP;
//活动的拨号连接的动态IP地址信息
begin
connections[ 0 ].dwSize := sizeof(RASCONN);
longSize := MaxConnections * connections[ 0 ].dwSize;
//接收活动连接的缓冲区大小
intAvailabelConnections := 0;
//获取所有活动的拨号连接的信息(连接句柄和设置信息)
dwResult := RasEnumConnections( connections[ 0 ],
longSize,intAvailabelConnections );
if 0 < > dwResult then
memo1.lines.add( '错误:' + inttostr( dwResult ) )
else
begin
memo1.lines.add( '现有的活动连接有' +
IntToStr( intAvailabelConnections ) + '个');
//显示所有活动的拨号连接的信息(设置信息和动态IP地址)
for intIndex := 0 to intAvailabelConnections - 1 do
begin
//显示一个活动的拨号连接的设置信息
strTemp := '连接名称:'
+ StrPAS( connections[ intIndex ].szEntryName )
+ ',设备类型:'
+ StrPAS( connections[ intIndex ].szDeviceType )
+ ',设备名称:'
+ StrPAS( connections[ intIndex ].szDeviceName );
memo1.lines.add( strTemp );
//显示一个活动的拨号连接的动态IP地址
dwSize := SizeOf(RASpppIP);
RASpppIP.dwSize := dwSize;
dwResult := RASGetProjectionInfo
( connections[ intIndex ].hRasConn,
RASP_PppIp,RasPPPIP,dwSize);//获取动态IP地址
if 0 < > dwResult then
memo1.lines.add(
'错误:' + inttostr( dwResult ))
else
memo1.lines.add(
'动态地址:' + StrPas(RASpppIP.szIPAddress));
end;
end;
end;
ADSL和VPN也算是拔号网络啊