救命啊,折磨我好几天了,谁帮我解决这个问题送分到满意为止 如何判断adsl连接网络状态,不用ping,不用访问网页,就是通过判断ip,或其他方法,请指教。另外indy里有这样的组件吗?idipwatch不行,因为adsl的网卡的ip是不变的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unit IPAddressTools;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;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;//获取所有活动的拨号连接的信息(连接句柄和设置信息)Function GetRasIP(RasIndex:integer):String;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';implementationFunction GetRasIP(RasIndex:integer):String;var connections : array[0..9] of RASCONN ; //拨号连接数组 longSize : dword; intAvailabelConnections : dword; //活动的拨号连接的实际数目 intIndex : integer; dwResult : DWORD; dwSize : DWORD; RASpppIP : TRASPPPIP ; //活动的拨号连接的动态IP地址信息begin connections[ 0 ].dwSize := sizeof(RASCONN); longSize := 10 * connections[ 0 ].dwSize ; //接收活动连接的缓冲区大小 intAvailabelConnections := 0 ; //获取所有活动的拨号连接的信息(连接句柄和设置信息) dwResult := RasEnumConnections( connections[ 0 ], longSize,intAvailabelConnections ); Result := ''; if 0 <> dwResult then Result := 'Error' else begin for intIndex := 0 to intAvailabelConnections - 1 do begin dwSize := SizeOf(RASpppIP); RASpppIP.dwSize := dwSize; dwResult := RASGetProjectionInfo(connections[intIndex].hRasConn,RASP_PppIp,RasPPPIP,dwSize);//获取动态IP地址 if 0 <> dwResult then Result := 'Error' else Result := StrPas(RASpppIP.szIPAddress); end; end; end;end.如果只有一个拨号连接,直接GetRasIP(0)=''说明没有进行连接,如果不等于空说明连接了当然也可以for i:=0 to 10来判断 求思路:基于数据库表字段的公式编辑器怎么设计 点击这里触发什么事件 关于主从表新增的问题 word文件如何存入和导出数据库 这样的变量怎么写? 运行时就会存在,但是写代码时如果不加修饰就编译不通过? 与日期相关的数据库检索 心情不爽 急问!!!DBImage如何存取图片数据 公司面试题! 与大家分享!有点意思! installshield如何在文件组中加入整个目录?(各位救急) 公司的根基是什么? 当Form关闭时,为什么没有执行此Form上的Edit控件的DestroyWnd?
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
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;
//获取所有活动的拨号连接的信息(连接句柄和设置信息)
Function GetRasIP(RasIndex:integer):String;
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';implementationFunction GetRasIP(RasIndex:integer):String;var
connections : array[0..9] of RASCONN ; //拨号连接数组
longSize : dword;
intAvailabelConnections : dword; //活动的拨号连接的实际数目
intIndex : integer;
dwResult : DWORD;
dwSize : DWORD;
RASpppIP : TRASPPPIP ; //活动的拨号连接的动态IP地址信息
begin
connections[ 0 ].dwSize := sizeof(RASCONN);
longSize := 10 * connections[ 0 ].dwSize ; //接收活动连接的缓冲区大小
intAvailabelConnections := 0 ; //获取所有活动的拨号连接的信息(连接句柄和设置信息)
dwResult := RasEnumConnections( connections[ 0 ], longSize,intAvailabelConnections );
Result := '';
if 0 <> dwResult then
Result := 'Error'
else begin
for intIndex := 0 to intAvailabelConnections - 1 do begin
dwSize := SizeOf(RASpppIP);
RASpppIP.dwSize := dwSize;
dwResult := RASGetProjectionInfo(connections[intIndex].hRasConn,RASP_PppIp,RasPPPIP,dwSize);//获取动态IP地址
if 0 <> dwResult then
Result := 'Error'
else
Result := StrPas(RASpppIP.szIPAddress);
end;
end;
end;
end.
如果只有一个拨号连接,直接GetRasIP(0)=''说明没有进行连接,如果不等于空说明连接了
当然也可以for i:=0 to 10来判断