pb中获得本机IP地址的另一个方法

来源:互联网 发布:淘宝达人有用吗 编辑:程序博客网 时间:2024/05/29 18:38

 pb中获得本机IP地址的另一个方法

一般人多用run("regsvr32 /s MSWINSCK.OCX")注册后,利用这个控件,获得包括IP地址在内的本机各种信息。
这里介绍的是  利用访问注册表的方法,来获得本机的IP地址。因为没有利用别人的控件,程序更“独立”了。

GetEnvironment(ge_env)
CHOOSE CASE ge_env.OSType
//aix!, hpux!, macintosh!, osf1!, sol2!, windows!, wondowsnt!
 CASE Windows!
  gs_OStype = "Windows"
 CASE WindowsNT!
  gs_OStype = "WindowsNT"
 CASE ELSE
  gs_OStype = "Other"  
END CHOOSE


//使用注册表取本机IP地址
String ls_value = ""
String subkeys[]
CHOOSE CASE gs_OStype
 CASE 'Windows'
  String skey = 'HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Class/NetTrans'
  String sname = 'IPAddress'
  Int i
  String skey1
  ls_value = ''
  RegistryKeys ( skey, subkeys )
  IF UpperBound(subkeys) > 0 THEN
   FOR i = 1 To UpperBound(subkeys)
    skey1 = skey+'/'+subkeys[i]
    IF RegistryGet(skey1,sname,ls_value) = 1 THEN
     IF ls_value <> '0.0.0.0' THEN
      EXIT
     END IF
    END IF
   NEXT
  END IF
 CASE "WindowsNT"
  String ls_keynt1 = 'HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/NetworkCards'
  IF RegistryKeys (ls_keynt1,subkeys ) = 1 THEN
   IF UpperBound(subkeys) > 0 THEN
    ls_keynt1 = ls_keynt1+'/'+subkeys[1]
   END IF
  END IF
  //bill Tcpip 可能需要查询 ls_keynt1 字段所有的子项,主要是指:最后一个项 6 在不同的机器上是不一样的
  String ls_keynt2 = 'HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/'
  String ls_keynt3 = '/Parameters/Tcpip'
  String ls_name_nt1 = 'ServiceName'
  String ls_name_nt2 = 'IPAddress'
  String ls_name_nt3 = ''
  String ls_value2[]
  IF RegistryGet(ls_keynt1,ls_name_nt1,ls_value) = 1 THEN
   ls_name_nt3 = ls_keynt2+ls_value+ls_keynt3
   IF RegistryGet(ls_name_nt3,ls_name_nt2,RegMultiString!,ls_value2) = 1 THEN
    ls_value = ls_value2[1]
   ELSE
    //   可能有多个ip地址  ls_value = ls_value2[1] + " ; " + ls_value2[2]
    ls_value = ls_value2[1]
   END IF
  ELSE
   ls_value = ''
  END IF
 CASE ELSE
  ls_value = ''
  RETURN
END CHOOSE
gs_ipaddress  = ls_value