嗨,大家好
如何使用Inno安裝程序獲取用戶的本地IP地址? 我認爲使用win32 api GetIpAddrTable緊靠,但不清楚如何進行調整。 劑量有其他方式嗎?或知道如何做到這一點? 坦克如何使用Inno-setup獲得本地IP地址
回答
這取決於您是否需要IPv4地址或IPv6地址。但是既然你提到了GetIpAddrTable,它只返回IPv4地址,我懷疑這是你想要的。
每臺機器可以有多個本地IP地址。所以我把它們作爲TStringList返回。 我測試了下面的機器有5個IP地址。
由於InnoSetup不支持指針,我必須通過緩衝區的字節數組來完成所有操作。
下面的代碼是一個完整的InnoSetup腳本,演示如何使用此功能。
[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;
+1來直接在innosetup中導入API。 – 2011-05-30 05:11:10
是的,也是+1,但我個人仍然儘可能地將所有實用程序代碼移到腳本之外(並轉換爲助手DLL)。安裝程序腳本不能很好地縮放,保持它們的意思並精簡可讀性/可維護性。 – 2011-05-31 07:32:33
我會將這些例程放在一個ISPP'#include'語句中以保持乾淨。 – 2011-05-31 13:11:49
構建一個外部DLL,它返回一個IP地址列表並在Inno Setup腳本中讀取該列表。
在this article中,您將找到代碼示例如何構建DLL以及如何在InnoSetup腳本中調用它。
In this SO post你會發現如何使用Indy庫或純WinApi獲取IP地址。
不需要創建外部DLL,InnoSetup可以直接調用API – 2011-05-30 02:26:49
- 1. 使用Boost.Asio獲取本地IP地址
- 2. 獲取本地IP地址
- 3. ASP.NET MVC:如何獲得本地IP地址的代理之後
- 4. Spring Integration TCP:如何獲得本地IP地址
- 5. 如何獲得Oracle內部PC的本地IP地址ApEx
- 6. 在iOS6中如何獲得IP地址
- 7. 在drupal7 webform如何獲得IP地址
- 8. 如何在php中獲得IP地址
- 9. 如何獲得IP和MAC地址
- 10. 如何在node.js中獲得IP地址
- 11. 如何獲得IP地址的路徑
- 12. 如何使用php獲取本地ip地址?
- 13. 如何使用koaJS獲取本地域IP地址
- 14. 如何使用vb獲取本地ip地址?
- 15. 如何使用JavaScript獲取本地IP地址?
- 16. 本地IP地址?
- 17. 如何使用R獲取IP地址?
- 18. 如何使用IP地址
- 19. 如何獲取IP地址?
- 20. 如何獲取IP地址?
- 21. 如何使用C#獲取IP地址的物理(MAC)地址?
- 22. 如何獲得給定開始和結束IP地址的IP地址範圍?
- 23. 當用戶使用IP地址打開網站時如何獲取IP地址?
- 24. 如何獲得Odoo用戶IP地址,當我使用Nginx的
- 25. NSNetService initWithDomain使用本地IP地址?
- 26. 使用xcode訪問本地ip地址
- 27. 如何檢測本地IP地址
- 28. 如何連接到本地IP地址
- 29. 獲取本地IP地址在Delphi
- 30. 獲取非本地IP地址Java
你用什麼意思使用inno設置? – opc0de 2011-05-29 09:33:02
@ opc0de:他可能正在編寫一個Inno Setup腳本。 Inno Setup支持Pascal腳本。 – 2011-05-29 09:38:30
在安裝過程中,我需要向用戶顯示**本地** IP地址列表(如果他有多個網卡物理或邏輯),並讓用戶從列表中選擇是IP地址。 – 2011-05-29 10:09:10