说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

用Delphi程序获取拨号连接的动态IP地址

HTML文档下载 WORD文档下载 PDF文档下载
用Delphi程序获取拨号连接的动态IP地址

在WIN9X下,如果安装了拨号网络,则在WINDOWS系统的系统目录System下将有两个拨号网络管理程序库RasApi32.DLL和RasApi16.DLL,我们可利用其中的RAS系列函数来获取和设置拨号连接网络的信息。当然是可以获取拨号连接的动态IP地址了。在Delphi帮助文件中,有相关RAS函数的详细说明。

一、先解释一些要用到的数据常量和数据结构。

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;

以上程序在PWIN98+Delphi3.0下调试通过。

优化delphi5.0秘籍大曝光 元件的handle的建立-Delphi资料 元件卷动的改进-Delphi资料 在delhpi程序中获取网络资源信息-Delphi资料 在Delphi中操作快捷方式 在DLL中实现文件的拷贝-Delphi资料 在Report Builder中增加自定义函数-Delphi资料 在Win2000 Beta下安装Delphi 在Word插入字符-Delphi资料 注册表中几个对编程特别有用的地方-Delphi资料 资源文件在DELPHI中的使用 自制替换指定串函数-Delphi资料 API函数快速入门API函数简介-VB资料 API函数快速入门怎样在VB中声明和使用API函数 API函数在VB开发中的应用 API函数在VB中的应用 API实现完美的图片出现效果-VB资料 ListView控件特效-VB资料 Office 95 API 的企业开发者指南-VB资料 SENDMESSAGE函数巧应用 -VB资料 VB 与Windows API 讲座(五) VB5 未公开的函数 VB5.0与Windows API 间的呼叫技巧 VB5中回调函数的使用方法 VB的API编程精粹(二) VB的API编程精粹(一) VB调用API函数技巧快速选择全部项目 VB调用API函数使窗口保持在最上层 VB中调用Windows API的注意事项 VB中访问API函数之防错技巧 VB中利用API函数实现特殊窗体的两种方法 在DELPHI中,怎么遍历相同的控件? 一个简单的问题---在线等 在线等待:如何捕捉listctrl垂直滚动条的点击事件? 控件分类管理 急求一个递归统计函数,能解决者马上给分!!! 如何在ie中只打印iframe里面的页面内容 求select语句 请jennifergiant来领分,谢谢 如何将在内存中创建的BMP文件加载到页面上??? 帮忙看个错,ORA-00600 那里可以下载测试工具(Loadrunner,testdirector) 如何写一个往数据库里插入记录的公共模块啊? 文本两边对齐 请问sqlserver2000中bit类型值怎样表示 谁有jspsmart 上传组件。我上不了jspsmart.com ,好心人给我发一个!!! 时间格式有误,不知是何原因? 怎样开、关进程!(不是线程)? 今年高考的一篇旷世奇文 cnn连接怎么单独写出来,让Sub或Function调用?不用每次都写一次连接, 请附上Code ,谢谢 请教multibytetowidechar的用法 请救各位. 关于用nmudp实现传输!up也有分,:)) jcreator的debug模式不是很好用,怎么(黄色小三角)指的位置不对啊? 关于用mscomm编程的问题,请大虾指教 导出数据库和操作时经常出现无法分配共享内存错误. 关于ListBox 重分请教:关于制作自定义报表的问题!!! 请问怎样编程查询一个字符串的五笔字型编码? 我们单位要上ERP,作为公司分管微机这一块的我该准备些什么? 右键菜单问题 d7+ADO+SQL2000,如何判断SQL2000数据库中存在某个表? 想要去清华读研究生,大家帮忙出出意见!!!!!!!!!!!!!!!!!!!!!!!! 大价钱求解小问题 好硕的5460!!!! iwantsay 关于MSComm的output和Chr()函数的问题 好久没来这里了这里的朋友们还在吗? 如何在TreeView的节点中调用一个方法? 关于deploytools 一个有关代理文件操作的问题,困扰很久了!! 如何由资源ID得到资源的句柄 向oracle 中插入纪录,日期格式由问题,见内 查询问题 如何取消验证 关于asp打印的一些设置的请教 dbgrid显示不同小数位数问题 关于用nmudp实现传输!up也有分,:)) 我在WSAD5.0中创建的WAS 5.0Server 为什么总是启动出错???请各位高手指点!!! 关于Apache+mysql 100分求《设计模式-可复用面向对象软件的基础》电子书! 向oracle 中插入纪录,日期格式由问题,见内 在线等候 ①﹙x+1/3﹚2=4②x2-x-6=0③y2-3y+1=0 Make the sentences.坐等回答秒采纳,我每天都问题打字好累啊1.likes,tea,he,Chinese,without,in,it,anything2.takes,a,ARG,pets,of,without,care,home3.nice,sometimes,their,are,people,not,to,pets4.left,in,his.him,field,a,family,alone5.in,umbr 很快就要升初中考了!作文应该怎写?语文老师说,应该写一件事,但,应该怎样写? 一只猫最多能活几年 我们人一生不知道是什么时候死! 是只狼狗,有点大,但现在脚有点比便,还能活多大? 全国人民代表大会闭会期间,是不开会的时候,还是快开完的时候? 已知an是等比数列,判断下列数列是否为等比数列{an-an+1}{an*an+1}高一的 “游人去而禽鸟乐也”中的“去”是什么意思? “禽鸟之乐,游人之乐,太守之乐”他们的乐趣分别在哪 文章第四段写了禽鸟乐,游人乐,太守乐分别乐什么文章第四段写了禽鸟乐,游人乐,太守乐.那么太守乐的是什么?写禽鸟,游人乐的目的又是什么 格鲁吉亚大选出口民调显示执政联盟或将澳大利亚山火多处火情失控 1名救援飞美管理自身经济能力遭疑 奥巴马急于吸浙江温岭遇害医生遗体被送殡仪馆 医务温岭市一医院“10·25”事件善后工综述:东南亚能源市场潜力备受关注南航空客380首航悉尼成功外交部就安倍涉华挑衅言论、美监听他国外交部:中方对叙提交化武初始宣布和销张平会见欧洲客人新闻分析:格鲁吉亚大选后内政外交如何重上5000点:股市行远需改革助力北京一小型直升机坠入密云水库 机上2原标题:“国家智库报告”发布 助力中原标题:瞭望:以变革打通道路,释放经原标题:一只羊,一辈子 记“中国军垦原标题:国务院再出五策 为\"双创\NBA总决赛揭幕战创收视纪录 相比去欧文左膝盖骨折缺席3 4个月 总决赛驻日发言人:中方公务船赴钓鱼岛巡航属渤海海峡省际航线客船因大风停航天津大学发表声明谴责美方 支持被捕教
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘