在InstallShield中透過主機名獲取IP地址 (轉)

amyz發表於2007-11-25
在InstallShield中透過主機名獲取IP地址 (轉)[@more@]/* written by Jaron ,2002-07-15 */
/* 原出處:江都資訊網論壇 /bbs " target=_blank>;;*/
/* 轉載請註明出處和保留此版權資訊 */
/* 歡迎使用SiteManager網站管理 ;; */

// 文 件 名:setup.rul
// 指令碼功能:透過主機名獲得地址
// 編寫日期:-07-15
// 使用方法: fGetIpAddress(szHost, szIPAdress)
// written by Jaron ,2002-07-15 
// 原出處:江都資訊網論壇 ;;
// 轉載請註明出處和保留此版權資訊 
// 歡迎使用SiteManager網站管理系統 ;; 

#include "Sddialog.h"
#include "IpAddress.rul"

STRING szIPAddress;
STRING szHostName;

BOOL nResult;

program

 SdShowDlgEdit1 ("", "請輸入您的主機名稱", "主機名:", szHostName);
 nResult = fGetIpAddress(szHostName, szIPAddress);
 if nResult then
 MessageBox ("是:" + szIPAddress, INFORMATION);
 endif;

endprogram
#include "Sddialog.rul"


==========================
// 文 件 名:IpAddress.rul
// 指令碼功能:透過主機名獲得TCP/IP地址
// 編寫日期:2003-07-15
// 使用方法:
// 1. 在 setup.rul 前面加入 #include "IpAddress.rul" 
// 2. 呼叫函式 fGetIpAddress(szHost, szIPAdress)
// written by Jaron ,2002-07-15 
// 原出處:江都資訊網論壇 ;;
// 轉載請註明出處和保留此版權資訊 
// 歡迎使用SiteManager網站管理系統 ;; 

 NUMBER WSOCK32.Wtartup( NUMBER, POINTER);
prototype NUMBER WSOCK32.gethostbyname(STRING);
prototype NUMBER KERNEL32.RtlMoveMemory (POINTER, NUMBER, NUMBER);
prototype NUMBER WSOCK32.WSACleanup();

prototype fGetIpAddress(STRING, BYREF STRING);

typedef WSADATA
begin
 INT wversion;
 INT wHighVersion;
 STRING szDescription[255];
 STRING szSystemStatus[128];
 INT iMaxSockets;
 INT iMaxUdpDg;
 INT lpszVendorInfo;

end;

typedef HOSTENT
begin
 NUMBER hName; // As Long
 NUMBER hAliases; // As Long
 SHORT hAddrType; //As Integer
 SHORT hLength; // As Integer
 NUMBER hAddrList; // As Long
end;

typedef IPADDRESS
begin
 CHAR b1; //First
 CHAR b2; //Second
 CHAR b3; //Third
 CHAR b4; //Fourth
end;

function fGetIpAddress(szHost, szIPAdress)
 WSADATA StructWSAData;
 WSADATA POINTER pStructWSAData;

 HOSTENT StructHostEnt;
 HOSTENT POINTER pStructHostEnt; 

 NUMBER nResult;
 NUMBER pHostAddress;

 POINTER pHostIPAddress;
 NUMBER HostIPAddress;

 IPADDRESS IpAddress;
 IPADDRESS POINTER pIpAddress;

 STRING sb1, sb2, sb3, sb4; 

 NUMBER nStartUp;
 BOOL bReturn;

begin

 if szHost = "" then
 return FALSE;
 endif;
 
 if UseDLL(WINSYSDIR^"WSOCK32.DLL")  return FALSE;
 endif;
 
 pStructWSAData = &StructWSAData;
 pStructHostEnt = &StructHostEnt;
 
 nStartUp = WSAStartup(0x101, pStructWSAData);
 
 if nStartUp != 0 then
 return FALSE;
 endif;
 
 pHostAddress = gethostbyname(szHost);
 
 if pHostAddress != 0 then

 RtlMoveMemory (pStructHostEnt, pHostAddress, 16);
 
 pHostIPAddress = &HostIPAddress; 
 RtlMoveMemory (pHostIPAddress, StructHostEnt.hAddrList, 4);
 
 pIpAddress = &IpAddress;
 RtlMoveMemory (pIpAddress, HostIPAddress, 4);
 
 NumToStr(sb1, pIpAddress->b1);
 NumToStr(sb2, pIpAddress->b2);
 NumToStr(sb3, pIpAddress->b3);
 NumToStr(sb4, pIpAddress->b4);
 
 szIPAdress = sb1 + "." + sb2 + "." + sb3 + "." + sb4 ;
 
 bReturn = TRUE;
 
 else
 bReturn = FALSE;
 
 endif;
 
 if nStartUp = 0 then
 WSACleanup();
 endif;
 
 UnUseDLL("WSOCK32.DLL");

 return bReturn;

end;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-984521/,如需轉載,請註明出處,否則將追究法律責任。

相關文章