问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

delphi 获取本地IP地址的几种方法

发布网友 发布时间:2022-05-16 07:28

我来回答

3个回答

热心网友 时间:2023-10-15 05:48

1、通过注册表获取或修改Ip
想到Windows会把系统网卡相关信息存入注册表,肯定可通过注册表读取具体ip信息。大致思路是找HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards ,由NetworkCards得分支表示各个网卡的信息通过ServiceName到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces 下找到对应的网卡配置详细信息,通过对注册表的read与write实现读取或修改ip地址等信息。
2、通过解析批处理命令结果获取
在cmd命令行输入ipconfig可以显示出当前电脑ip地址,可以考虑先执执行命令"Ipconfig /all >Ips.txt",然后解析Ips.txt文件得到本机的Ip信息,此方法较繁杂。
3、通过delphi控件获取Ip
找到fastnet 下的 Tpowersock控件,利用 该控件localip属性返回 本机(主要指局域网) ip地址 。 放一个控件在窗体上可得到本机IP,方便简单。
4、通过WinSock函数获取Ip
此方法在程序中常用,一般函数如下:
//多网卡 将IP地址写入到列表,求本机IP的话返回IP列表中的第一个即可,该函数要引用 WinSock
function GetLocalIpList(var IpList:TStringList):Integer;
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
HostName: array [0..MAX_PATH] of char;
NameLen: Integer;
WSData: TWSAData;
lpHostEnt: PHostEnt;
I: Integer;
pptr: PaPInAddr;
begin
Result := 0;
if WSAStartup(MakeWord(2,0), WSData) <> 0 then Exit;
try
NameLen := sizeof(HostName);
fillchar(HostName, NameLen, 0);
NameLen := GetHostName(HostName, NameLen);
if NameLen = SOCKET_ERROR then Exit;
lpHostEnt := GetHostByName(HostName);
if lpHostEnt = Nil then Exit;
I := 0;
pPtr := PaPInAddr(lpHostEnt^.h_addr_list);
IpList.Clear;
while pPtr^[I] <> nil do
begin
IpList.ADD( inet_ntoa(pptr^[I]^));
Inc(I);
end;
Result := IpList.Count;
finally
WSACleanup;
end;
end;

热心网友 时间:2023-10-15 05:49

用这个function LocalIP : string;
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe : PHostEnt;
pptr : PaPInAddr;
Buffer : array [0..63] of char;
I : Integer;
GInitData : TWSADATA;
begin
WSAStartup($101, GInitData);
Result := ' ';
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^[I] <> nil do begin
if i=0
then result:=StrPas(inet_ntoa(pptr^[I]^))
else result:=result+ ', '+StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;

热心网友 时间:2023-10-15 05:49

function LocalIP : string;
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe : PHostEnt;
pptr : PaPInAddr;
Buffer : array [0..63] of char;
I : Integer;
GInitData : TWSADATA;
begin
WSAStartup($101, GInitData);
Result := ' ';
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^[I] <> nil do begin
if i=0
then result:=StrPas(inet_ntoa(pptr^[I]^))
else result:=result+ ', '+StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何在win10下安装docker? windows(win10)上的docker使用:安装(国内镜像)、操作 win10安装dockerWin10下Docker安装和使用 关于安装配置docker,找不到Hyper-V(win10 家庭版需要配置,专业版不需要... 怎么把微信上的聊天记录转到新手机 怎么把聊天记录转到另一个手机 快递被别人冒领,快递公司有没有责任 洋葱汤洋葱汤 一颗洋葱汤怎么做 一颗洋葱汤怎么做好吃 php json_encode 后, 汉字被转移了 给儿子取名马顺禹,觉得名字取的是不太大了?小名果果,像女孩的名字吗? 苹果6通讯录全丢了 如何恢复 加盟项目有推荐吗? 盒马的黄米凉糕即食吗 上海维迪赛文化传媒有限公司怎么样? 陕西盛世华彩文化传媒有限公司怎么样? 西北凉糕的做法步骤图,西北凉糕怎么做好吃 苹果6手机怎么恢复通讯录 河南万辉文化传媒有限公司怎么样? 河南辉润文化传媒有限公司怎么样? 南通耀辉文化传媒有限公司怎么样? 北京耀辉文化传媒有限公司怎么样? 山西耀辉文化传媒有限公司怎么样? 如何使得中文不被 json 在淘宝上买了一个商品,想退货,现在快递还没到,我地址填的放快递柜,请问我一定要拿出快递自己发货吗? 淘宝上买了东西,送到一半了,不想要了,要怎么办?卖家有赠送运费险,但是一般快递都是放快递柜的 淘宝退换货那个运费险是怎么扣的?如果是用蜂巢快递柜寄的,那会自动扣运费险吗?要先申请退货再放快递柜 有运费险的物品通过丰巢快递柜会在淘宝上自动理赔吗? PHP中数组转json时汉字如何不变成Unicode编码保留汉字 淘宝收货地址怎么一直默认到农村淘宝服务站去?这个要怎么改成默认地址呢? 淘宝评价拍照有什么好处 淘宝评价并截图有什么好处 淘宝评价截图有意义吗 微信僵尸粉药怎么清理呢 微信僵尸粉是什么 男生是否可以光脚穿鞋 意外险赔付中,断掌和断指的赔付标准有何不同? 男生光脚露脚脖穿板鞋行吗? 右手拇指掉了一半,有意外险,保险公司能赔多少 为什么现在男生都爱光脚穿鞋呢? 我是个男生,现在夏天我想穿凉鞋,可是在学校里光脚穿鞋好像有点低人一等的感觉,而且被同学看见我光脚 干活时手断了买了意外险主家还要赔偿多少左右? 我是男生,光脚穿帆布鞋好看吗? 人身意外伤害保险伤残评定2014板双手缺失10%是指双手各10%还是其中一手10 为什么男生光脚 女生穿鞋 一年四季都光脚穿鞋可以吗?有坏处吗?杭州 初一男生 学校排练跳舞,让男生赤脚女生穿鞋,恰当吗? 一手缺失30%,该评为几级伤残?(意外伤害保险评定标准) 你好,我个人买的。意外险。左手食指断了两节,伤残鉴定中心说我。。。这个定不了。。达不到伤残等级。 银行连续发6条提示不要泄露秘密是怎么回事