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