如何使用Inno-setup获取本地IP地址 [英] How to get the local IP Address using Inno-setup

查看:1326
本文介绍了如何使用Inno-setup获取本地IP地址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨嗨家伙

如何使用Inno设置获取用户的本地ip地址?
我以为使用win32 api GetIpAddrTable,但是不清楚如何进行调整。
用别人的方法吗还是知道该怎么做?
tank

Hi guys
how can I get user's local ip address using Inno setup? I thought abut using win32 api GetIpAddrTable but it is unclear how to make the adjustment. Dose someone have any other way? or know how to do it? tanks

推荐答案

这取决于你想要IPv4地址还是IPv6地址。但是由于你提到GetIpAddrTable,它只返回IPv4地址,我怀疑这是你想要的。

It depends on if you want IPv4 address or the IPv6 address. But since you mentioned GetIpAddrTable and it only returns IPv4 addresses I suspect that is what you wanted.

每个机器可以有多个本地IP地址。所以我把它们当作一个TStringList
我测试了以下的机器有5个IP地址。

Each machine can have more than one local IP Address. So I return them as a TStringList The machine I tested the following on had 5 IP Addresses.

由于InnoSetup不支持指针,所以我不得不做一切一个用于缓冲区的字节数组。

Since InnoSetup does not support Pointers I had to do everything through an Array of Byte for the buffer.

下面的代码是一个完整的InnoSetup脚本,演示了如何使用此功能。

The code below is a complete InnoSetup Script that demonstrates how to use this function.

[Setup]
AppName=Test
AppVersion=1.5
DefaultDirName={pf}\test

[Code]

const
 ERROR_INSUFFICIENT_BUFFER = 122;


function GetIpAddrTable( pIpAddrTable: Array of Byte;
  var pdwSize: Cardinal; bOrder: WordBool ): DWORD;
external 'GetIpAddrTable@IpHlpApi.dll stdcall';


procedure GetIpAddresses(Addresses : TStringList);
var 
 Size : Cardinal;
 Buffer : Array of Byte;
 IpAddr : String;
 AddrCount : Integer;
 I, J : Integer;
begin
  // Find Size
  if GetIpAddrTable(Buffer,Size,False) = ERROR_INSUFFICIENT_BUFFER then
  begin
     // Allocate Buffer with large enough size
     SetLength(Buffer,Size);
     // Get List of IP Addresses into Buffer
     if GetIpAddrTable(Buffer,Size,True) = 0 then
     begin
       // Find out how many addresses will be returned.
       AddrCount := (Buffer[1] * 256) + Buffer[0];
       // Loop through addresses.
       For I := 0 to AddrCount -1 do
       begin
         IpAddr := '';
         // Loop through each byte of the address
         For J := 0 to 3 do
         begin
           if J > 0 then
             IpAddr := IpAddr + '.';
           // Navigagte through record structure to find correct byte of Addr
           IpAddr := IpAddr + IntToStr(Buffer[I*24+J+4]);
         end;
         Addresses.Add(IpAddr);
       end;
     end;
  end;
end;

function InitializeSetup(): Boolean;
var
 SL : TStringList;
begin
  SL := TStringList.Create;
  GetIpAddresses(SL);
  MsgBox(SL.Text, mbInformation, MB_OK);
  SL.Free;
end;

这篇关于如何使用Inno-setup获取本地IP地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆