1. ホーム
  2. スクリプト・コラム
  3. その他

InstallShield でホスト名から IP アドレスを取得するコード

2022-01-07 07:34:37
// ファイル名:setup.rul
// スクリプト機能:ホスト名によるTCP/IPアドレスの取得
// 書かれた日付。2003-07-15
// 使い方 関数 fGetIpAddress(szHost, szIPAdress) を呼び出す。
// 執筆者 Jaron ,2002-07-15 
// 投稿者 江都资讯网论坛 http://www.jiangdu.net/bbs;; 
// 出所を明記の上、この著作権情報を保持してください。 
// SiteManagerウェブ管理システムへようこそ http://sitemanager.cnzone.net;; 
#include "Sddialog.h"。
#include "IpAddress.rul"。
STRING szIPAddress;
STRING szHostName;
BOOL nResult;
プログラム
 SdShowDlgEdit1 ("", "Please enter your host name", "Host name: ", szHostName) を実行します。
 nResult = fGetIpAddress(szHostName, szIPAddress)とする。
 if nResult then
 MessageBox ("IPアドレスは:" + szIPAddress, INFORMATION)。
 エンドイフ。
エンドプログラム
#include "Sddialog.rul"。
==========================
// 文書名:IpAddress.rul
// スクリプト機能:ホスト名によるTCP/IPアドレスの取得
// 書かれた日付。2003-07-15
// 使用方法
// 1.setup.rulの前に#include "IpAddress.rul"を追加します。 
// 2.関数fGetIpAddress(szHost, szIPAdress)を呼び出す。
// 執筆者 Jaron ,2002-07-15 
// 投稿者 江都资讯网论坛 http://www.jiangdu.net/bbs;; 
// 出所を明記の上、この著作権情報を保持してください。 
// SiteManagerウェブ管理システムへようこそ http://sitemanager.cnzone.net;; 
プロトタイプ NUMBER WSOCK32.WSAStartup( NUMBER, POINTER);
プロトタイプ NUMBER WSOCK32.gethostbyname(STRING);
prototype NUMBER KERNEL32.RtlMoveMemory (POINTER, NUMBER, NUMBER)。
プロトタイプ NUMBER WSOCK32.WSACleanup();
プロトタイプ fGetIpAddress(STRING, BYREF STRING);
typedef WSADATA
始める
    INT wversion;
    INT wHighVersion;
    STRING szDescription[255];
    STRING szSystemStatus[128] です。
    INT iMaxSockets;
    INT iMaxUdpDg;
    INT lpszVendorInfo;
を終了します。
typedef HOSTENT
始める
    NUMBER hName; // Longとして
    NUMBER hAliases; // Longとして
    SHORT hAddrType; // 整数として
    SHORT hLength; // 整数として
    NUMBER hAddrList; // Longとして
を終了します。
typedef IPADDRESS
始める
 CHAR b1; //最初
 CHAR b2; //セカンド
 CHAR b3; //サード
 CHAR b4; //4番目
を終了します。
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;
始める
 if szHost = "" then
  FALSE を返します。
 エンドイフ
 if UseDLL(WINSYSDIR^"WSOCK32.DLL") < 0 then
  はFALSEを返します。
 エンドイフ
 pStructWSAData = &StructWSAData;
 pStructHostEnt = &StructHostEnt;
 nStartUp = WSAStartup(0x101, pStructWSAData);
 if nStartUp ! = 0 なら
  は FALSE を返します。
 エンドイフ
 pHostAddress = gethostbyname(szHost);
 if pHostAddress ! = 0 なら
  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。
 その他
  bReturn = FALSE とする。
 エンドイフ
 if nStartUp = 0 then
  WSACleanup()を実行します。
 エンドイフ
 UnUseDLL("WSOCK32.DLL");
 bReturnを返します。
を終了します。