delphi winapi inno-setup pascal

delphi - Cómo obtener la dirección IP local usando Inno-setup



winapi pascal (2)

Cree una DLL externa que devuelva una lista de direcciones IP y lea esa lista en la secuencia de comandos Inno Setup.

En este artículo encontrará ejemplos de código sobre cómo crear una DLL y cómo llamarla en la secuencia de comandos InnoSetup.

En esta publicación SO encontrará cómo obtener direcciones IP utilizando la biblioteca Indy o WinApi simple.

Hola chicos
¿Cómo puedo obtener la dirección IP local del usuario usando la configuración de Inno? Pensé en utilizar GetIpAddrTable de api win32, pero no está claro cómo hacer el ajuste. ¿Alguien tiene alguna otra forma? o sabes cómo hacerlo? tanques


Depende de si desea la dirección IPv4 o la dirección IPv6. Pero como mencionaste GetIpAddrTable y solo devuelve direcciones IPv4, sospecho que eso es lo que querías.

Cada máquina puede tener más de una dirección IP local. Así que los devuelvo como TStringList. La máquina que probé a continuación tenía 5 direcciones IP.

Como InnoSetup no es compatible con los punteros, tuve que hacer todo a través de una matriz de bytes para el búfer.

El siguiente código es un script InnoSetup completo que demuestra cómo usar esta función.

[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 ''[email protected] 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;