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