LAN info - Windows only
- doctorized
- Addict 
- Posts: 882
- Joined: Fri Mar 27, 2009 9:41 am
- Location: Athens, Greece
Re: LAN info - Windows only
Now I saw all your posts. Yes, I have one LAN card on every pc I tested the code. Now that I know what is going on I have my way to find the solution. Sorry for posting a code that is not functional. I will fix it ASAP.
			
			
									
									
						Re: LAN info - Windows only
You can create a virtual lancard with virtualbox or vmware to see what happens.
			
			
									
									PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.

						Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.

- doctorized
- Addict 
- Posts: 882
- Joined: Fri Mar 27, 2009 9:41 am
- Location: Athens, Greece
Re: LAN info - Windows only
I made some changes and now shows correctly my two lan cards. Test it and tell me if it works for you.
Some improvements must be done, the code is a little strange, as infratec said, because it comes from an old VB project.
			
			
									
									
						Some improvements must be done, the code is a little strange, as infratec said, because it comes from an old VB project.
Code: Select all
#MIB_IF_TYPE_OTHER = 1
#MIB_IF_TYPE_ETHERNET = 6
#MIB_IF_TYPE_TOKENRING = 9
#MIB_IF_TYPE_FDDI = 15
#MIB_IF_TYPE_PPP = 23
#MIB_IF_TYPE_LOOPBACK = 24
#MIB_IF_TYPE_SLIP = 28
#MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0
#MIB_IF_OPER_STATUS_UNREACHABLE = 1
#MIB_IF_OPER_STATUS_DISCONNECTED = 2
#MIB_IF_OPER_STATUS_CONNECTING = 3
#MIB_IF_OPER_STATUS_CONNECTED = 4
#MIB_IF_OPER_STATUS_OPERATIONAL = 5
#BROADCAST_NODETYPE = 1
#PEER_TO_PEER_NODETYPE = 2
#MIXED_NODETYPE = 4
#HYBRID_NODETYPE = 8
Structure IP_ADDR_STRING1
    NextAdapter.i
    IpAddress.a[16];IP_ADDRESS_STRING
    IpMask.a[16];IP_ADDRESS_STRING
    Context.i
 EndStructure
 
 Structure FIXED_INFO1
    HostName.a[132]            ;MAX_HOSTNAME_LEN + 4
    DomainName.a[132]         ;MAX_DOMAIN_NAME_LEN + 4
    CurrentDnsServer.i
    DnsServerList.IP_ADDR_STRING1
    NodeType.l
    ScopeId.a[260]             ;MAX_SCOPE_ID_LEN + 4
    EnableRouting.l
    EnableProxy.l
    EnableDns.l
 EndStructure
 
Structure IP_ADAPTER_INFO1
    NextAdapter.i
    ComboIndex.l
    AdapterName.a[260] ;MAX_ADAPTER_NAME_LENGTH + 4
    Description.a[132] ;MAX_ADAPTER_DESCRIPTION_LENGTH + 4
    AddressLength.l
    Address.a[8] ;MAX_ADAPTER_ADDRESS_LENGTH
    index.l
    Type.l
    DhcpEnabled.i
    CurrentIpAddress.i
    IpAddressList.IP_ADDR_STRING1
    GatewayList.IP_ADDR_STRING1
    DhcpServer.IP_ADDR_STRING1
    HaveWINS.i
    PrimaryWinsServer.IP_ADDR_STRING1
    SecondaryWinsServer.IP_ADDR_STRING1
    LeaseObtained.i
    LeaseExpires.i
 EndStructure
 
 Structure MIB_IFROW
    wszName.a[512] ;MAX_INTERFACE_NAME_LEN * 2
    dwIndex.l
    dwType.l
    dwMtu.l
    dwSpeed.l
    dwPhysAddrLen.l
    bPhysAddr.a[8] ;MAXLEN_PHYSADDR
    dwAdminStatus.l
    dwOperStatus.l
    dwLastChange.l
    dwInOctets.l
    dwInUcastPkts.l
    dwInNUcastPkts.l
    dwInDiscards.l
    dwInErrors.l
    dwInUnknownProtos.l
    dwOutOctets.l
    dwOutUcastPkts.l
    dwOutNUcastPkts.l
    dwOutDiscards.l
    dwOutErrors.l
    dwOutQLen.l
    dwDescrLen.l
    bDescr.a[256] ;MAXLEN_IFDESCR
EndStructure
Structure MIB_IFTABLE1
    dwNumEntries.l
    table.MIB_IFROW[50]
 EndStructure
 
Structure NetWorkInfo
index.l
HostName.s
DomainName.s
DNSIPAdd.s[11]
nod.s
ScopeID.s
DNSE.s
ProxyE.s
RoutE.s
Conx.s
AdapterName.s[11]
Type.s[11]
Speed.s[11]
sMTU.s[11]
packsS.s[11]
bytesS.s[11]
packsR.s[11]
bytesR.s[11]
status.s[11]
IPAddr.s[11]
SubMask.s[11]
Addr.s[11]
Indx.s[11]
DHCPE.s[11]
DHCPIPAddr.s[11]
DHCPIPMask.s[11]
DHCPLObt.s[11]
DHCPLExp.s[11]
GateIPAddress.s[11]
GateIPMask.s[11]
HaveWINS.s[11]
PWINSIPAddress.s[11]
PWINSIPMask.s[11]
SWINSIPAddress.s[11]
SWINSIPMask.s[11]
EndStructure
Global MIB_IFTABLE.MIB_IFTABLE1
 Global Dim IP_ADAPTER_INFO.IP_ADAPTER_INFO1(1)
 Global NewList NICs.s()
 Global GroupDemicals.s = ","
 Global GroupThousands.s = "."
 Global LANInfo.NetWorkInfo
 
 Procedure.d int32_uint32(lValue.l)
int32uint32.l
    If lValue < 0
        int32uint32 = lValue + $100000000
    Else
        int32uint32 = lValue
    EndIf
    ProcedureReturn int32uint32
 EndProcedure
 
 Procedure.s c2str(num.d, demical.l=0)
ProcedureReturn ReplaceString(StrD(num,demical), ".", GroupDemicals)
EndProcedure
Procedure.s FormatByteSize(n.q)
  Protected s.s=Str(n)
  Protected len=Len(s)
  Protected ret.s
 
  For i=0 To len-1
    If i And Not i%3 : ret="." + ret : EndIf; "." is the greek symbol for separating thousands. Use your own.
    ret= Mid(s,len-i,1) +ret
  Next
 
  ProcedureReturn ret
EndProcedure
Procedure.s SpaceDivider(space.q)
tm.s:mt.d=space
If mt>1000: mt / 1024:tm = " KB":EndIf
If mt>1000: mt / 1024:tm = " MB":EndIf
If mt>1000: mt / 1024:tm = " GB":EndIf
If mt>1000: mt / 1024:tm = " TB":EndIf
ProcedureReturn ReplaceString(StrD(mt,3), ".", GroupDemicals) + tm
EndProcedure
Procedure LAN()
hMod.i = LoadLibrary_("iphlpapi.dll")
FuncName.s = Space(60)
PokeS(@FuncName,"GetAdaptersInfo",-1,#PB_Ascii)
If GetProcAddress_(hMod, FuncName) <> 0 
	;lBufferLength.l = SizeOf(IP_ADAPTER_INFO1)
	lErrors = GetAdaptersInfo_(0, @lBufferLength)
	ReDim IP_ADAPTER_INFO.IP_ADAPTER_INFO1(19);(lBufferLength/SizeOf(IP_ADAPTER_INFO1))
	lErrors = GetAdaptersInfo_(@IP_ADAPTER_INFO(0), @lBufferLength)
	If lErrors <> #ERROR_SUCCESS: MessageRequester("Error","GetAdaptersInfo_() error."): ProcedureReturn: EndIf
	lBufferPos.l
	;ShowMemoryViewer(@IP_ADAPTER_INFO(0),SizeOf(IP_ADAPTER_INFO1)*18)
	For i=0 To 100
		;Debug PeekS(@IP_ADAPTER_INFO(i)\Description,-1,#PB_Ascii)
		LANInfo\AdapterName[AdapterCount] = PeekS(@IP_ADAPTER_INFO(i)\Description,-1,#PB_Ascii)
		lBufferPos = lBufferPos + SizeOf(IP_ADAPTER_INFO1)
		If lBufferPos < lBufferLength 
			AdapterCount + 1
		Else
			Break
		EndIf
	Next
Else
	MessageRequester("error","Could not connect with 'iphlpapi.dll'.")
	ProcedureReturn
EndIf
AdapterCount.i
tmp.s
tmp2.d
FuncName = Space(60)
PokeS(@FuncName,"GetIfTable",-1,#PB_Ascii)
If GetProcAddress_(hMod, FuncName) <> 0  ;for speed and status
lSize = SizeOf(MIB_IFTABLE1)
lErrors = GetIfTable_(@MIB_IFTABLE, @lSize, 0)
EndIf
;Debug "MIB_IFTABLE\dwNumEntries = " + Str(MIB_IFTABLE\dwNumEntries)
;For i=0 To MIB_IFTABLE\dwNumEntries
;	Debug PeekS(@MIB_IFTABLE\table[i]\wszName,-1,#PB_Unicode)
;	Debug MIB_IFTABLE\table[i]\dwMtu
;Next
;ShowMemoryViewer(@MIB_IFTABLE,SizeOf(MIB_IFTABLE1))
FuncName = Space(60)
PokeS(@FuncName,"GetNetworkParams",-1,#PB_Ascii)
If GetProcAddress_(hMod, FuncName) <> 0 
	xx = 0
	Dim FIXED_INFO.FIXED_INFO1(9)
	lBufferLength = SizeOf(FIXED_INFO1)*9
	lErrors = GetNetworkParams_(@FIXED_INFO(), @lBufferLength)
	For i=0 To 9
		With FIXED_INFO(i)
			If \HostName = 0:Break:EndIf
		IP_ADDR_STRING.IP_ADDR_STRING1
		LANInfo\HostName = PeekS(@\Hostname,-1,#PB_Ascii)
		LANInfo\DomainName = PeekS(@\DomainName,-1,#PB_Ascii)
		If \EnableDns = 1:  LANInfo\DNSE = "Yes": Else: LANInfo\DNSE = "No": EndIf
		LANInfo\DNSIPAdd[xx] = PeekS(@\DnsServerList\IpAddress,-1,#PB_Ascii)
		lNext.l = \DnsServerList\NextAdapter
		While aa.l=0
			If lNext <> 0 
				If IsBadReadPtr_(lNext, SizeOf(IP_ADDR_STRING1)) = #False
					MoveMemory(@lNext, @IP_ADDR_STRING, SizeOf(IP_ADDR_STRING1))
				EndIf
				If lNext <> IP_ADDR_STRING\NextAdapter 
					lNext = IP_ADDR_STRING\NextAdapter
					xx = xx + 1
					LANInfo\DNSIPAdd[xx] = PeekS(@IP_ADDR_STRING\IpAddress[0],-1,#PB_Ascii)
				Else
					aa=1
				EndIf
			Else
				aa=1
			EndIf
		Wend
		Select \NodeType
			Case #BROADCAST_NODETYPE: LANInfo\nod = "Broadcast"
			Case #PEER_TO_PEER_NODETYPE: LANInfo\nod = "Peer To Peer"
			Case #MIXED_NODETYPE: LANInfo\nod = "Mixed"
			Case #HYBRID_NODETYPE: LANInfo\nod = "Hybrid"
			Default: LANInfo\nod = "Unknown " + Str(\NodeType)
		EndSelect
		LANInfo\ScopeID = ReplaceString(PeekS(@\ScopeId[0],-1,#PB_Ascii), Chr(0), "")
		If \EnableProxy = 1: LANInfo\ProxyE = "Yes": Else: LANInfo\ProxyE = "No": EndIf
		If \EnableRouting = 1:  LANInfo\RoutE = "Yes": Else: LANInfo\RoutE = "No": EndIf
	EndWith
	Next
Else
	MessageRequester("error","GetNetworkParams not found")
EndIf
For i = 0 To AdapterCount
	With IP_ADAPTER_INFO(i)
		Select \Type
		   Case #MIB_IF_TYPE_OTHER: LANInfo\Type[i] = "Other"
		   Case #MIB_IF_TYPE_ETHERNET: LANInfo\Type[i] = "Ethernet"
		   Case #MIB_IF_TYPE_TOKENRING: LANInfo\Type[i] = "Tokenring"
		   Case #MIB_IF_TYPE_FDDI: LANInfo\Type[i] = "FDDI"
		   Case #MIB_IF_TYPE_PPP: LANInfo\Type[i] = "PPP"
		   Case #MIB_IF_TYPE_LOOPBACK: LANInfo\Type[i] = "Loopback"
		   Case #MIB_IF_TYPE_SLIP: LANInfo\Type[i] = "Slip"
		   Default: LANInfo\Type[i] = "Unknown " + Str(\Type)
		EndSelect
		For ii = 0 To 20
			If PeekS(@MIB_IFTABLE\table[ii]\bDescr,-1,#PB_Ascii) = LANInfo\AdapterName[i]
				tmp2 = int32_uint32(MIB_IFTABLE\table[ii]\dwSpeed): tmp = " bit"
				If tmp2 >= 1000:  tmp2 = tmp2 / 1000: tmp = " Kbit":EndIf
				If tmp2 >= 1000:  tmp2 = tmp2 / 1000: tmp = " Mbit": EndIf
				If tmp2 >= 1000:  tmp2 = tmp2 / 1000: tmp = " Gbit": EndIf
				LANInfo\Speed[i] = c2str(tmp2,2) + tmp
				LANInfo\sMTU[i] = Str(MIB_IFTABLE\table[ii]\dwMtu) + " bytes"
				LANInfo\packsS[i] = FormatByteSize(MIB_IFTABLE\table[ii]\dwOutNUcastPkts + MIB_IFTABLE\table[ii]\dwOutUcastPkts)
				
				tmp = FormatByteSize(MIB_IFTABLE\table[ii]\dwOutOctets)
				If tmp = "":  tmp = "0": EndIf
				If MIB_IFTABLE\table[ii]\dwOutOctets > 1024
					tmp + "  ( " + SpaceDivider(MIB_IFTABLE\table[ii]\dwOutOctets) + " )"
					If Right(tmp,6) = GroupDemicals + "000 )":tmp=Left(tmp,Len(tmp)-6) + " )": EndIf
				EndIf
				LANInfo\bytesS[i] = tmp
				LANInfo\packsR[i] = FormatByteSize(MIB_IFTABLE\table[ii]\dwInNUcastPkts + MIB_IFTABLE\table[ii]\dwInUcastPkts)
		
				tmp = FormatByteSize(MIB_IFTABLE\table[ii]\dwInOctets)
				If tmp = "":  tmp = "0": EndIf
				If (MIB_IFTABLE\table[ii]\dwInOctets & $FFFFFFFF) > 1024
					tmp + "  ( " + SpaceDivider(MIB_IFTABLE\table[ii]\dwInOctets) + " )"
					If Right(tmp,6) = GroupDemicals + "000 )":tmp=Left(tmp,Len(tmp)-6) + " )": EndIf
				EndIf
				LANInfo\bytesR[i] = tmp
				
				Select MIB_IFTABLE\table[ii]\dwOperStatus
		    		Case #MIB_IF_OPER_STATUS_NON_OPERATIONAL: LANInfo\status[i] = "Non operational"
		    		Case #MIB_IF_OPER_STATUS_UNREACHABLE: LANInfo\status[i] = "Unreachable"
		    		Case #MIB_IF_OPER_STATUS_DISCONNECTED: LANInfo\status[i] = "Disconnected"
		    		Case #MIB_IF_OPER_STATUS_CONNECTING: LANInfo\status[i] = "Connecting"
		    		Case #MIB_IF_OPER_STATUS_CONNECTED: LANInfo\status[i] = "Connected"
		    		Case #MIB_IF_OPER_STATUS_OPERATIONAL: LANInfo\status[i] = "Operational"
		    		Default: LANInfo\status[i] = "Unknown " + c2str(int32_uint32(MIB_IFTABLE\table[ii]\dwOperStatus),0)
				EndSelect
				Break
			EndIf
		Next
	
		LANInfo\IPAddr[i] = PeekS(@\IpAddressList\IpAddress,-1,#PB_Ascii)
		LANInfo\SubMask[i] = PeekS(@\IpAddressList\IpMask,-1,#PB_Ascii)
		tmp = ""
		If Len(PeekS(@\AdapterName,-1,#PB_Ascii)) >= \AddressLength
		   For lIncrement.l = 0 To \AddressLength-1
		       tmp = tmp + RSet(Hex(\Address[lIncrement] & $FF),2,"0")
		    Next lIncrement
		   tmp = RSet(tmp,12,"0")
		   tmp = Left(tmp, 2) + ":" + Mid(tmp, 3, 2) + ":" + Mid(tmp, 5, 2) + ":" + Mid(tmp, 7, 2) + ":" + Mid(tmp, 9, 2) + ":" + Mid(tmp, 11, 2)
		   LANInfo\Addr[i] = tmp
		EndIf
		LANInfo\Indx[i] = (c2str(int32_uint32(\Index),0))
		
		If \DhcpEnabled = 1:  LANInfo\DHCPE[i] = "Yes": Else: LANInfo\DHCPE[i] = "No": EndIf
		LANInfo\DHCPIPAddr[i] = PeekS(@\DhcpServer\IpAddress,-1,#PB_Ascii)
		LANInfo\DHCPIPMask[i] = PeekS(@\DhcpServer\IpMask,-1,#PB_Ascii)
		If \LeaseObtained > 10000 
		  tmp = FormatDate("%dd/%mm/%yyyy , %hh:%ii:%ss",AddDate( 1/1/1970,#PB_Date_Second, \LeaseObtained))
		  LANInfo\DHCPLObt[i] = FormatDate("%dd/%mm/%yyyy , %hh:%ii:%ss",AddDate( ParseDate("%dd/%mm/%yyyy , %hh:%ii:%ss",tmp),#PB_Date_Minute,-TZResult ))
		Else
			LANInfo\DHCPLObt[i] = "NotAvailable"
		EndIf
		If \LeaseExpires > 10000 
		  tmp = FormatDate("%dd/%mm/%yyyy , %hh:%ii:%ss",AddDate( 1/1/1970,#PB_Date_Second, \LeaseExpires))
		  LANInfo\DHCPLExp[i] = FormatDate("%dd/%mm/%yyyy , %hh:%ii:%ss",AddDate( ParseDate("%dd/%mm/%yyyy , %hh:%ii:%ss",tmp),#PB_Date_Minute,-TZResult))
		Else
			LANInfo\DHCPLExp[i] = "NotAvailable"
		EndIf
	   
		CopyMemory(@\IpAddressList,@IP_ADDR_STRING,SizeOf(IP_ADDR_STRING1))
		For ii=0 To 100
		   If IP_ADDR_STRING\NextAdapter <> 0 
		       If IsBadReadPtr_(@IP_ADDR_STRING\NextAdapter, SizeOf(IP_ADDR_STRING1)) = #False 
		           MoveMemory(@IP_ADDR_STRING\NextAdapter, @IP_ADDR_STRING, SizeOf(IP_ADDR_STRING1))
		       EndIf
		   Else
		       Break
		   EndIf
		   If bShutdown = #True: Break: EndIf
		Next
	  LANInfo\GateIPAddress[i] = PeekS(@\GatewayList\IpAddress,-1,#PB_Ascii)
	  LANInfo\GateIPMask[i] = PeekS(@\GatewayList\IpMask,-1,#PB_Ascii)
	  If \HaveWINS = 1:  LANInfo\HaveWINS[i] = "Yes": Else: LANInfo\HaveWINS[i] = "No": EndIf
	  LANInfo\PWINSIPAddress[i] = PeekS(@\PrimaryWinsServer\IpAddress,-1,#PB_Ascii)
	  LANInfo\PWINSIPMask[i] = PeekS(@\PrimaryWinsServer\IpMask,-1,#PB_Ascii)
	  LANInfo\SWINSIPAddress[i] = PeekS(@\SecondaryWinsServer\IpAddress,-1,#PB_Ascii)
	  LANInfo\SWINSIPMask[i] = PeekS(@\SecondaryWinsServer\IpMask,-1,#PB_Ascii)
	EndWith
Next
EndProcedure
If OpenWindow(0, 0, 0, 432, 510, "LAN", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
 		ListIconGadget(0,5,5,422,500,"Element",200,#PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
 		AddGadgetColumn(0,1,"Data",200)
EndIf
LAN()
AddGadgetItem(0,-1,"Host  name"+Chr(10)+LANInfo\HostName)
AddGadgetItem(0,-1,"Domain  name"+Chr(10)+LANInfo\DomainName)
AddGadgetItem(0,-1,"DNS  enabled"+Chr(10)+LANInfo\DNSE)
For i=0 To 10
	If LANInfo\DNSIPAdd[i] <> ""
		AddGadgetItem(0,-1,"DNS  Server  IP  address  #" + Str(i+1)+Chr(10)+LANInfo\DNSIPAdd[i])
	EndIf
Next
AddGadgetItem(0,-1,"Node  type"+Chr(10)+LANInfo\nod)
AddGadgetItem(0,-1,"Scope  ID"+Chr(10)+LANInfo\ScopeID)
AddGadgetItem(0,-1,"WINS  Proxy  Enabled"+Chr(10)+LANInfo\ProxyE)
AddGadgetItem(0,-1,"IP  Routing  Enabled"+Chr(10)+LANInfo\RoutE)
For i=0 To 10
	If LANInfo\AdapterName[i] <> ""
		AddGadgetItem(0,-1,""+Chr(10)+"")
		AddGadgetItem(0,-1,"Connection  #"+Str(i+1)+Chr(10)+"")
		SetGadgetItemColor(0,CountGadgetItems(0)-1,#PB_Gadget_FrontColor,$906000,0)
		AddGadgetItem(0,-1,"Adapter  name"+Chr(10)+LANInfo\AdapterName[i])
		AddGadgetItem(0,-1,"Type"+Chr(10)+LANInfo\Type[i])
		AddGadgetItem(0,-1,"Speed"+Chr(10)+LANInfo\Speed[i])
		AddGadgetItem(0,-1,"Maximum  Transfer  Unit  Size  (MTU)"+Chr(10)+LANInfo\sMTU[i])
		AddGadgetItem(0,-1,"Packets  sent"+Chr(10)+LANInfo\packsS[i])
		AddGadgetItem(0,-1,"Bytes  sent"+Chr(10)+LANInfo\bytesS[i])
		AddGadgetItem(0,-1,"Packets  received"+Chr(10)+LANInfo\packsR[i])
		AddGadgetItem(0,-1,"Bytes  received"+Chr(10)+LANInfo\bytesR[i])
		AddGadgetItem(0,-1,"Status"+Chr(10)+LANInfo\status[i])
		AddGadgetItem(0,-1,"IP"+Chr(10)+LANInfo\IPAddr[i])
		AddGadgetItem(0,-1,"SubMask"+Chr(10)+LANInfo\SubMask[i])
		AddGadgetItem(0,-1,"Address"+Chr(10)+LANInfo\Addr[i])
		AddGadgetItem(0,-1,"Index"+Chr(10)+LANInfo\Indx[i])
		AddGadgetItem(0,-1,"DHCP  enabled"+Chr(10)+LANInfo\DHCPE[i])
		AddGadgetItem(0,-1,"DCHP  IP  address"+Chr(10)+LANInfo\DHCPIPAddr[i])
		AddGadgetItem(0,-1,"DCHP  IP  mask"+Chr(10)+LANInfo\DHCPIPMask[i])
		AddGadgetItem(0,-1,"DHCP lease obtained"+Chr(10)+LANInfo\DHCPLObt[i])
		AddGadgetItem(0,-1,"DHCP lease expires"+Chr(10)+LANInfo\DHCPLExp[i])
		AddGadgetItem(0,-1,"Gateway  IP  address"+Chr(10)+LANInfo\GateIPAddress[i])
		AddGadgetItem(0,-1,"Gateway  IP  mask"+Chr(10)+LANInfo\GateIPMask[i])
		AddGadgetItem(0,-1,"Have  WINS"+Chr(10)+LANInfo\HaveWINS[i])
		If LANInfo\HaveWINS[i] = "Yes"
			AddGadgetItem(0,-1,"Primary  WINS  Server  IP  address"+Chr(10)+LANInfo\PWINSIPAddress[i])
			AddGadgetItem(0,-1,"Primary  WINS  Server  IP  mask"+Chr(10)+LANInfo\PWINSIPMask[i])
			AddGadgetItem(0,-1,"Secondary  WINS  Server  IP  address"+Chr(10)+LANInfo\SWINSIPAddress[i])
			AddGadgetItem(0,-1,"Secondary  WINS  Server  IP  Mask"+Chr(10)+LANInfo\SWINSIPMask[i])
		EndIf
	EndIf
Next
	
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
End   Re: LAN info - Windows only

This one works!
PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.

						Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.

Re: LAN info - Windows only
Hi,
'with a little help from my friends' I mananged to remove all fixed sizes.
Now it has 'no limits'
Bernd
			
			
									
									
						'with a little help from my friends' I mananged to remove all fixed sizes.
Now it has 'no limits'
Code: Select all
;EnableExplicit
#GroupDemicals$ = ","
#GroupThousands$ = "."
#MIB_IF_TYPE_OTHER = 1
#MIB_IF_TYPE_ETHERNET = 6
#MIB_IF_TYPE_TOKENRING = 9
#MIB_IF_TYPE_FDDI = 15
#MIB_IF_TYPE_PPP = 23
#MIB_IF_TYPE_LOOPBACK = 24
#MIB_IF_TYPE_SLIP = 28
#MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0
#MIB_IF_OPER_STATUS_UNREACHABLE = 1
#MIB_IF_OPER_STATUS_DISCONNECTED = 2
#MIB_IF_OPER_STATUS_CONNECTING = 3
#MIB_IF_OPER_STATUS_CONNECTED = 4
#MIB_IF_OPER_STATUS_OPERATIONAL = 5
#BROADCAST_NODETYPE = 1
#PEER_TO_PEER_NODETYPE = 2
#MIXED_NODETYPE = 4
#HYBRID_NODETYPE = 8
#MAX_HOSTNAME_LEN = 128
#MAX_DOMAIN_NAME_LEN = 128
#MAX_SCOPE_ID_LEN = 256
#MAX_ADAPTER_NAME = 128
#MAX_ADAPTER_DESCRIPTION_LENGTH = 128
#MAX_ADAPTER_NAME_LENGTH = 256
#MAX_ADAPTER_ADDRESS_LENGTH = 8
#MAX_INTERFACE_NAME_LEN = 256
#MAXLEN_PHYSADDR = 8
#MAXLEN_IFDESCR = 256
#ERROR_SUCCESS = 0
#ERROR_BUFFER_OVERFLOW = 111
#ERROR_INSUFFICIENT_BUFFER = 122
Structure IP_ADDRESS_STRING
  String.a[16]
EndStructure
Structure IP_MASK_STRING
  String.a[16]
EndStructure
Structure IP_ADDR_STRING
  NextAdapter.i
  IpAddress.IP_ADDRESS_STRING
  IpMask.IP_ADDRESS_STRING
  Context.i
EndStructure
Structure FIXED_INFO
  HostName.a[#MAX_HOSTNAME_LEN + 4]
  DomainName.a[#MAX_DOMAIN_NAME_LEN + 4]
  CurrentDnsServer.i
  DnsServerList.IP_ADDR_STRING
  NodeType.l
  ScopeId.a[#MAX_SCOPE_ID_LEN + 4]
  EnableRouting.l
  EnableProxy.l
  EnableDns.l
EndStructure
Structure IP_ADAPTER_INFO
  *NextAdapter
  ComboIndex.l
  AdapterName.a[#MAX_ADAPTER_NAME_LENGTH + 4]
  Description.a[#MAX_ADAPTER_DESCRIPTION_LENGTH + 4]
  AddressLength.l
  Address.a[#MAX_ADAPTER_ADDRESS_LENGTH]
  index.l
  Type.l
  DhcpEnabled.i
  *CurrentIpAddress.IP_ADDR_STRING
  IpAddressList.IP_ADDR_STRING
  GatewayList.IP_ADDR_STRING
  DhcpServer.IP_ADDR_STRING
  HaveWINS.l
  PrimaryWinsServer.IP_ADDR_STRING
  SecondaryWinsServer.IP_ADDR_STRING
  LeaseObtained.l
  LeaseExpires.l
EndStructure
Structure MIB_IFROW
  wszName.a[#MAX_INTERFACE_NAME_LEN * 2]  ; * 2 cause stored as unicode
  dwIndex.l
  dwType.l
  dwMtu.l
  dwSpeed.l
  dwPhysAddrLen.l
  bPhysAddr.a[#MAXLEN_PHYSADDR]
  dwAdminStatus.l
  dwOperStatus.l
  dwLastChange.l
  dwInOctets.l
  dwInUcastPkts.l
  dwInNUcastPkts.l
  dwInDiscards.l
  dwInErrors.l
  dwInUnknownProtos.l
  dwOutOctets.l
  dwOutUcastPkts.l
  dwOutNUcastPkts.l
  dwOutDiscards.l
  dwOutErrors.l
  dwOutQLen.l
  dwDescrLen.l
  bDescr.a[#MAXLEN_IFDESCR]
EndStructure
Structure MIB_IFTABLE
  dwNumEntries.l
  table.MIB_IFROW[0]
EndStructure
Structure AdapterStructure
  AdapterName.s
  Type.s
  Speed.s
  sMTU.s
  packsS.s
  bytesS.s
  packsR.s
  bytesR.s
  status.s
  IPAddr.s
  SubMask.s
  Addr.s
  Indx.s
  DHCPE.s
  DHCPIPAddr.s
  DHCPIPMask.s
  DHCPLObt.s
  DHCPLExp.s
  GateIPAddress.s
  GateIPMask.s
  HaveWINS.s
  PWINSIPAddress.s
  PWINSIPMask.s
  SWINSIPAddress.s
  SWINSIPMask.s
EndStructure
Structure NetWorkInfoStructure
  index.l
  HostName.s
  DomainName.s
  nod.s
  ScopeID.s
  DNSE.s
  ProxyE.s
  RoutE.s
  Conx.s
  List DNSIPAddList.s()
  List AdapterList.AdapterStructure()
EndStructure
Procedure.d int32_uint32(lValue.l)
  
  Protected int32uint32.l
  
  
  If lValue < 0
    int32uint32 = lValue + $100000000
  Else
    int32uint32 = lValue
  EndIf
  
  ProcedureReturn int32uint32
  
EndProcedure
Procedure.s c2str(num.d, demical.l=0)
  
  ProcedureReturn ReplaceString(StrD(num,demical), ".", #GroupDemicals$)
  
EndProcedure
Procedure.s FormatByteSize(n.q)
  
  Protected.i length, i
  Protected s$, ret$
  
  
  s$ = Str(n)
  length = Len(s$) - 1
  For i = 0 To length
    If i And Not i % 3 : ret$ = #GroupThousands$ + ret$ : EndIf
    ret$ = Mid(s$, length - i, 1) + ret$
  Next
 
  ProcedureReturn ret$
  
EndProcedure
Procedure.s SpaceDivider(space.q)
  
  Protected.d mt
  Protected tm$
  
  
  mt = space
  If mt > 1000 : mt / 1024 : tm$ = " KB" : EndIf
  If mt > 1000 : mt / 1024 : tm$ = " MB" : EndIf
  If mt > 1000 : mt / 1024 : tm$ = " GB" : EndIf
  If mt > 1000 : mt / 1024 : tm$ = " TB" : EndIf
  
  ProcedureReturn ReplaceString(StrD(mt, 3), ".", #GroupDemicals$) + tm$
  
EndProcedure
Procedure LAN(*LANInfo.NetWorkInfoStructure)
  
  Protected.i AdapterCount, MIBCount
  Protected *MIBIfTable.MIB_IFTABLE
  Dim IPAdapterInfo.IP_ADAPTER_INFO(0)
  NewList NICs.s()
  
  
  hMod.i = LoadLibrary_("iphlpapi.dll")
  FuncName.s = Space(60)
  PokeS(@FuncName,"GetAdaptersInfo",-1,#PB_Ascii)
  If GetProcAddress_(hMod, FuncName) <> 0
    
    lBufferLength.l = 0
    lErrors = GetAdaptersInfo_(@IPAdapterInfo(0), @lBufferLength)
    
    If lErrors = #ERROR_BUFFER_OVERFLOW
      AdapterCount = lBufferLength / SizeOf(IP_ADAPTER_INFO)
      ReDim IPAdapterInfo(AdapterCount)
    EndIf
    lBufferLength = AdapterCount * SizeOf(IP_ADAPTER_INFO)
    
    lErrors = GetAdaptersInfo_(@IPAdapterInfo(0), @lBufferLength)
    If lErrors <> #ERROR_SUCCESS: ProcedureReturn: EndIf
    lBufferPos.l
;     For i=0 To AdapterCount - 1
;       Debug PeekS(@IPAdapterInfo(i)\AdapterName, #MAX_ADAPTER_NAME_LENGTH + 4, #PB_Ascii)
;       Debug PeekS(@IPAdapterInfo(i)\Description, #MAX_ADAPTER_DESCRIPTION_LENGTH + 4, #PB_Ascii)      
;     Next
  Else
    MessageRequester("error","Could not load 'iphlpapi.dll'.")
    ProcedureReturn
  EndIf
  
  AdapterCount.i
  tmp.s
  tmp2.d
  FuncName = Space(60)
  PokeS(@FuncName,"GetIfTable",-1,#PB_Ascii)
  If GetProcAddress_(hMod, FuncName) <> 0  ;for speed and status
    
    lSize = 0
    lErrors = GetIfTable_(*MIBIfTable, @lSize, 0)
    
    If lErrors = #ERROR_INSUFFICIENT_BUFFER
      ;Debug lSize - SizeOf(LONG)
      *MIBIfTable = AllocateMemory(lSize)
    EndIf
    
    lErrors = GetIfTable_(*MIBIfTable, @lSize, 0)
    If lErrors <> #ERROR_SUCCESS: ProcedureReturn: EndIf
    
;     Debug *MIBIfTable\dwNumEntries
;     
;     For i = 0 To *MIBIfTable\dwNumEntries - 1
;       Debug PeekS(@*MIBIfTable\table[i]\bDescr[0], *MIBIfTable\table[i]\dwDescrLen, #PB_Ascii)
;       Debug PeekS(@*MIBIfTable\table[i]\wszName[0], #MAX_INTERFACE_NAME_LEN, #PB_Unicode)
;       Debug *MIBIfTable\table[i]\dwOutOctets
;     Next i
    
  EndIf
  FuncName = Space(60)
  PokeS(@FuncName,"GetNetworkParams",-1,#PB_Ascii)
  If GetProcAddress_(hMod, FuncName) <> 0
    xx = 0
    FixedInfo.FIXED_INFO
    lBufferLength = SizeOf(FIXED_INFO)
    lErrors = GetNetworkParams_(@FixedInfo, @lBufferLength)
    With FixedInfo
      IPAddrString.IP_ADDR_STRING
      *LANInfo\HostName = PeekS(@\Hostname,-1,#PB_Ascii)
      *LANInfo\DomainName = PeekS(@\DomainName,-1,#PB_Ascii)
      If \EnableDns = 1:  *LANInfo\DNSE = "Yes": Else: *LANInfo\DNSE = "No": EndIf
      
      AddElement(*LANInfo\DNSIPAddList())
      *LANInfo\DNSIPAddList() = PeekS(@\DnsServerList\IpAddress,-1,#PB_Ascii)
      
      lNext.l = \DnsServerList\NextAdapter
      While aa.l=0
        If lNext <> 0
          If IsBadReadPtr_(lNext, SizeOf(IP_ADDR_STRING)) = #False
            MoveMemory(@lNext, @IPAddrString, SizeOf(IP_ADDR_STRING))
          EndIf
          If lNext <> IPAddrString\NextAdapter
            lNext = IPAddrString\NextAdapter
            xx = xx + 1
            ;*LANInfo\DNSIPAdd[xx] = PeekS(@IPAddrString\IpAddress\String,-1,#PB_Ascii)
            AddElement(*LANInfo\DNSIPAddList())
            *LANInfo\DNSIPAddList() = PeekS(@IPAddrString\IpAddress\String,-1,#PB_Ascii)
          Else
            aa=1
          EndIf
        Else
          aa=1
        EndIf
      Wend
      Select \NodeType
        Case #BROADCAST_NODETYPE: *LANInfo\nod = "Broadcast"
        Case #PEER_TO_PEER_NODETYPE: *LANInfo\nod = "Peer To Peer"
        Case #MIXED_NODETYPE: *LANInfo\nod = "Mixed"
        Case #HYBRID_NODETYPE: *LANInfo\nod = "Hybrid"
        Default: *LANInfo\nod = "Unknown " + Str(\NodeType)
      EndSelect
      *LANInfo\ScopeID = ReplaceString(PeekS(@\ScopeId[0],-1,#PB_Ascii), Chr(0), "")
      If \EnableProxy = 1: *LANInfo\ProxyE = "Yes": Else: *LANInfo\ProxyE = "No": EndIf
      If \EnableRouting = 1:  *LANInfo\RoutE = "Yes": Else: *LANInfo\RoutE = "No": EndIf
    EndWith
  Else
    MessageRequester("error","GetNetworkParams not found")
  EndIf
  
  For i = 0 To AdapterCount
    With IPAdapterInfo(i)
      
      For ii = 0 To *MIBIfTable\dwNumEntries - 1
        If PeekS(@*MIBIfTable\table[ii]\bDescr[0], *MIBIfTable\table[ii]\dwDescrLen, #PB_Ascii) = PeekS(@IPAdapterInfo(i)\Description, #MAX_ADAPTER_DESCRIPTION_LENGTH + 4,#PB_Ascii)
          
          ;Debug "Found " + PeekS(@IPAdapterInfo(i)\Description, #MAX_ADAPTER_DESCRIPTION_LENGTH + 4,#PB_Ascii)
          
          AddElement(*LANInfo\AdapterList())
          
          *LANInfo\AdapterList()\AdapterName = PeekS(@IPAdapterInfo(i)\Description, #MAX_ADAPTER_DESCRIPTION_LENGTH + 4,#PB_Ascii)
          
          Select \Type
            Case #MIB_IF_TYPE_OTHER: *LANInfo\AdapterList()\Type = "Other"
            Case #MIB_IF_TYPE_ETHERNET: *LANInfo\AdapterList()\Type = "Ethernet"
            Case #MIB_IF_TYPE_TOKENRING: *LANInfo\AdapterList()\Type = "Tokenring"
            Case #MIB_IF_TYPE_FDDI: *LANInfo\AdapterList()\Type = "FDDI"
            Case #MIB_IF_TYPE_PPP: *LANInfo\AdapterList()\Type = "PPP"
            Case #MIB_IF_TYPE_LOOPBACK: *LANInfo\AdapterList()\Type = "Loopback"
            Case #MIB_IF_TYPE_SLIP: *LANInfo\AdapterList()\Type = "Slip"
            Default: *LANInfo\AdapterList()\Type = "Unknown " + Str(\Type)
          EndSelect
          
          tmp2 = int32_uint32(*MIBIfTable\table[ii]\dwSpeed): tmp = " bit"
          If tmp2 >= 1000:  tmp2 = tmp2 / 1000: tmp = " Kbit":EndIf
          If tmp2 >= 1000:  tmp2 = tmp2 / 1000: tmp = " Mbit": EndIf
          If tmp2 >= 1000:  tmp2 = tmp2 / 1000: tmp = " Gbit": EndIf
          *LANInfo\AdapterList()\Speed = c2str(tmp2,2) + tmp
          *LANInfo\AdapterList()\sMTU = Str(*MIBIfTable\table[ii]\dwMtu) + " bytes"
          *LANInfo\AdapterList()\packsS = FormatByteSize(*MIBIfTable\table[ii]\dwOutNUcastPkts + *MIBIfTable\table[ii]\dwOutUcastPkts)
          
          tmp = FormatByteSize(*MIBIfTable\table[ii]\dwOutOctets)
          If tmp = "":  tmp = "0": EndIf
          If *MIBIfTable\table[ii]\dwOutOctets > 1024
            tmp + "  ( " + SpaceDivider(*MIBIfTable\table[ii]\dwOutOctets) + " )"
            If Right(tmp,6) = #GroupDemicals$ + "000 )":tmp=Left(tmp,Len(tmp)-6) + " )": EndIf
          EndIf
          *LANInfo\AdapterList()\bytesS = tmp
          *LANInfo\AdapterList()\packsR = FormatByteSize(*MIBIfTable\table[ii]\dwInNUcastPkts + *MIBIfTable\table[ii]\dwInUcastPkts)
          
          tmp = FormatByteSize(*MIBIfTable\table[ii]\dwInOctets)
          If tmp = "":  tmp = "0": EndIf
          If (*MIBIfTable\table[ii]\dwInOctets & $FFFFFFFF) > 1024
            tmp + "  ( " + SpaceDivider(*MIBIfTable\table[ii]\dwInOctets) + " )"
            If Right(tmp,6) = #GroupDemicals$ + "000 )":tmp=Left(tmp,Len(tmp)-6) + " )": EndIf
          EndIf
          *LANInfo\AdapterList()\bytesR = tmp
          
          Select *MIBIfTable\table[ii]\dwOperStatus
            Case #MIB_IF_OPER_STATUS_NON_OPERATIONAL: *LANInfo\AdapterList()\status = "Non operational"
            Case #MIB_IF_OPER_STATUS_UNREACHABLE: *LANInfo\AdapterList()\status = "Unreachable"
            Case #MIB_IF_OPER_STATUS_DISCONNECTED: *LANInfo\AdapterList()\status = "Disconnected"
            Case #MIB_IF_OPER_STATUS_CONNECTING: *LANInfo\AdapterList()\status = "Connecting"
            Case #MIB_IF_OPER_STATUS_CONNECTED: *LANInfo\AdapterList()\status = "Connected"
            Case #MIB_IF_OPER_STATUS_OPERATIONAL: *LANInfo\AdapterList()\status = "Operational"
            Default: *LANInfo\AdapterList()\status = "Unknown " + c2str(int32_uint32(*MIBIfTable\table[ii]\dwOperStatus),0)
          EndSelect
          
          Break
          
        EndIf
      Next
      
      *LANInfo\AdapterList()\IPAddr = PeekS(@\IpAddressList\IpAddress,-1,#PB_Ascii)
      *LANInfo\AdapterList()\SubMask = PeekS(@\IpAddressList\IpMask,-1,#PB_Ascii)
      tmp = ""
      If Len(PeekS(@\AdapterName,-1,#PB_Ascii)) >= \AddressLength
        For lIncrement.l = 0 To \AddressLength-1
          tmp = tmp + RSet(Hex(\Address[lIncrement] & $FF),2,"0")
        Next lIncrement
        tmp = RSet(tmp,12,"0")
        tmp = Left(tmp, 2) + ":" + Mid(tmp, 3, 2) + ":" + Mid(tmp, 5, 2) + ":" + Mid(tmp, 7, 2) + ":" + Mid(tmp, 9, 2) + ":" + Mid(tmp, 11, 2)
        *LANInfo\AdapterList()\Addr = tmp
      EndIf
      *LANInfo\AdapterList()\Indx = (c2str(int32_uint32(\Index),0))
      
      If \DhcpEnabled = 1:  *LANInfo\AdapterList()\DHCPE = "Yes": Else: *LANInfo\AdapterList()\DHCPE = "No": EndIf
      *LANInfo\AdapterList()\DHCPIPAddr = PeekS(@\DhcpServer\IpAddress,-1,#PB_Ascii)
      *LANInfo\AdapterList()\DHCPIPMask = PeekS(@\DhcpServer\IpMask,-1,#PB_Ascii)
      If \LeaseObtained > 10000
        tmp = FormatDate("%dd/%mm/%yyyy , %hh:%ii:%ss",AddDate( 1/1/1970,#PB_Date_Second, \LeaseObtained))
        *LANInfo\AdapterList()\DHCPLObt = FormatDate("%dd/%mm/%yyyy , %hh:%ii:%ss",AddDate( ParseDate("%dd/%mm/%yyyy , %hh:%ii:%ss",tmp),#PB_Date_Minute,-TZResult ))
      Else
        *LANInfo\AdapterList()\DHCPLObt = "NotAvailable"
      EndIf
      If \LeaseExpires > 10000
        tmp = FormatDate("%dd/%mm/%yyyy , %hh:%ii:%ss",AddDate( 1/1/1970,#PB_Date_Second, \LeaseExpires))
        *LANInfo\AdapterList()\DHCPLExp = FormatDate("%dd/%mm/%yyyy , %hh:%ii:%ss",AddDate( ParseDate("%dd/%mm/%yyyy , %hh:%ii:%ss",tmp),#PB_Date_Minute,-TZResult))
      Else
        *LANInfo\AdapterList()\DHCPLExp = "NotAvailable"
      EndIf
      
      CopyMemory(@\IpAddressList,@IPAddrString,SizeOf(IP_ADDR_STRING))
      For ii=0 To 100
        If IPAddrString\NextAdapter <> 0
          If IsBadReadPtr_(@IPAddrString\NextAdapter, SizeOf(IP_ADDR_STRING)) = #False
            MoveMemory(@IPAddrString\NextAdapter, @IPAddrString, SizeOf(IP_ADDR_STRING))
          EndIf
        Else
          Break
        EndIf
        If bShutdown = #True: Break: EndIf
      Next
      *LANInfo\AdapterList()\GateIPAddress = PeekS(@\GatewayList\IpAddress,-1,#PB_Ascii)
      *LANInfo\AdapterList()\GateIPMask = PeekS(@\GatewayList\IpMask,-1,#PB_Ascii)
      If \HaveWINS = 1:  *LANInfo\AdapterList()\HaveWINS = "Yes": Else: *LANInfo\AdapterList()\HaveWINS = "No": EndIf
      *LANInfo\AdapterList()\PWINSIPAddress = PeekS(@\PrimaryWinsServer\IpAddress,-1,#PB_Ascii)
      *LANInfo\AdapterList()\PWINSIPMask = PeekS(@\PrimaryWinsServer\IpMask,-1,#PB_Ascii)
      *LANInfo\AdapterList()\SWINSIPAddress = PeekS(@\SecondaryWinsServer\IpAddress,-1,#PB_Ascii)
      *LANInfo\AdapterList()\SWINSIPMask = PeekS(@\SecondaryWinsServer\IpMask,-1,#PB_Ascii)
    EndWith
  Next
  
  If *MIBIfTable
    FreeMemory(*MIBIfTable)
  EndIf
  
EndProcedure
;-Main
Define.i i
Define LANInfo.NetWorkInfoStructure
If OpenWindow(0, 0, 0, 432, 510, "Network Info", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(0,5,5,422,500,"Element",200,#PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
  AddGadgetColumn(0,1,"Data",200)
EndIf
LAN(@LANInfo)
AddGadgetItem(0,-1,"Host  name"+#LF$+LANInfo\HostName)
AddGadgetItem(0,-1,"Domain  name"+#LF$+LANInfo\DomainName)
AddGadgetItem(0,-1,"DNS  enabled"+#LF$+LANInfo\DNSE)
ForEach LANInfo\DNSIPAddList()
  AddGadgetItem(0,-1,"DNS  Server  IP  address  #" + Str(i+1)+#LF$+LANInfo\DNSIPAddList())
Next
AddGadgetItem(0,-1,"Node  type"+#LF$+LANInfo\nod)
AddGadgetItem(0,-1,"Scope  ID"+#LF$+LANInfo\ScopeID)
AddGadgetItem(0,-1,"WINS  Proxy  Enabled"+#LF$+LANInfo\ProxyE)
AddGadgetItem(0,-1,"IP  Routing  Enabled"+#LF$+LANInfo\RoutE)
AddGadgetItem(0,-1,""+#LF$+"")
i = 0
ForEach LANInfo\AdapterList()
  AddGadgetItem(0,-1,"Connection  #"+Str(i+1)+#LF$+"")
  SetGadgetItemColor(0,CountGadgetItems(0)-1,#PB_Gadget_FrontColor,$906000,0)
  AddGadgetItem(0,-1,"Adapter  name"+#LF$+LANInfo\AdapterList()\AdapterName)
  AddGadgetItem(0,-1,"Type"+#LF$+LANInfo\AdapterList()\Type)
  AddGadgetItem(0,-1,"Speed"+#LF$+LANInfo\AdapterList()\Speed)
  AddGadgetItem(0,-1,"Maximum Transfer Unit Size (MTU)"+#LF$+LANInfo\AdapterList()\sMTU)
  AddGadgetItem(0,-1,"Packets sent"+#LF$+LANInfo\AdapterList()\packsS)
  AddGadgetItem(0,-1,"Bytes sent"+#LF$+LANInfo\AdapterList()\bytesS)
  AddGadgetItem(0,-1,"Packets received"+#LF$+LANInfo\AdapterList()\packsR)
  AddGadgetItem(0,-1,"Bytes received"+#LF$+LANInfo\AdapterList()\bytesR)
  AddGadgetItem(0,-1,"Status"+#LF$+LANInfo\AdapterList()\status)
  AddGadgetItem(0,-1,"IP"+#LF$+LANInfo\AdapterList()\IPAddr)
  AddGadgetItem(0,-1,"SubMask"+#LF$+LANInfo\AdapterList()\SubMask)
  AddGadgetItem(0,-1,"Address"+#LF$+LANInfo\AdapterList()\Addr)
  AddGadgetItem(0,-1,"Index"+#LF$+LANInfo\AdapterList()\Indx)
  AddGadgetItem(0,-1,"DHCP enabled"+#LF$+LANInfo\AdapterList()\DHCPE)
  AddGadgetItem(0,-1,"DCHP IP address"+#LF$+LANInfo\AdapterList()\DHCPIPAddr)
  AddGadgetItem(0,-1,"DCHP IP mask"+#LF$+LANInfo\AdapterList()\DHCPIPMask)
  AddGadgetItem(0,-1,"DHCP lease obtained"+#LF$+LANInfo\AdapterList()\DHCPLObt)
  AddGadgetItem(0,-1,"DHCP lease expires"+#LF$+LANInfo\AdapterList()\DHCPLExp)
  AddGadgetItem(0,-1,"Gateway IP address"+#LF$+LANInfo\AdapterList()\GateIPAddress)
  AddGadgetItem(0,-1,"Gateway IP mask"+#LF$+LANInfo\AdapterList()\GateIPMask)
  AddGadgetItem(0,-1,"Have  WINS"+#LF$+LANInfo\AdapterList()\HaveWINS)
  If LANInfo\AdapterList()\HaveWINS = "Yes"
    AddGadgetItem(0,-1,"Primary WINS Server IP address"+#LF$+LANInfo\AdapterList()\PWINSIPAddress)
    AddGadgetItem(0,-1,"Primary WINS Server IP mask"+#LF$+LANInfo\AdapterList()\PWINSIPMask)
    AddGadgetItem(0,-1,"Secondary WINS Server IP address"+#LF$+LANInfo\AdapterList()\SWINSIPAddress)
    AddGadgetItem(0,-1,"Secondary WINS Server IP Mask"+#LF$+LANInfo\AdapterList()\SWINSIPMask)
  EndIf
  i + 1
Next
;-MainLoop
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
- doctorized
- Addict 
- Posts: 882
- Joined: Fri Mar 27, 2009 9:41 am
- Location: Athens, Greece
Re: LAN info - Windows only
I made some changes, I didn't post the new code yet but we have a strange problem with both my code and your code.infratec wrote:Now it has 'no limits'
If adapter's description contains non-english characters (greek in a computer that I tested the code) then:
1) GetAdaptersInfo_() returns "AdapterName" but it doesn't return "Description" which is the card's name.
2) GetIfTable_() in "bDescr" of "table" returns the card's name but the greek characters are not those who should be.
What I mean with this? Card's name is "Ελεγκτής δικτύου NVIDIA nForce".
The chars for "Ελεγκτής δικτύου" (=Network controller in greek) are: C5 EB E5 E3 EA F4 DE F2 for the first word and: E4 E9 EA F4 DF EF F5 for the second.
GetIfTable_() returns: 84 A2 9C 9A A1 AB E3 AA and 9B A0 A1 AB E7 A6 AC.
I thought that I could add something to get the real chars but the difference is not the same everywhere. For example, in the second word every "distance" from the char taken to the real char is $49 except DF to E7.
					Last edited by doctorized on Fri Aug 22, 2014 2:25 pm, edited 1 time in total.
									
			
									
						Re: LAN info - Windows only
Hi,
the only string which is unicode is:
wszName
all other strings are in ASCII.
So wszName should show the text in greek.
Oh...
wszName is not a userfriendly 'name' 
 
I don't know how greek PCs handle ASCII characters.
Bernd
			
			
									
									
						the only string which is unicode is:
wszName
all other strings are in ASCII.
So wszName should show the text in greek.
Oh...
wszName is not a userfriendly 'name'
 
 I don't know how greek PCs handle ASCII characters.
Bernd
- doctorized
- Addict 
- Posts: 882
- Joined: Fri Mar 27, 2009 9:41 am
- Location: Athens, Greece
Re: LAN info - Windows only
Yes, it has "\DEVICE\TCPIP_{AD7EDF7C-6017-4E74-AF57-FB4972F1FD6D}" in my case. Not really useful.infratec wrote: So wszName should show the text in greek.
Oh...
wszName is not a userfriendly 'name'
Re: LAN info - Windows only
One idea:
use an extra buffer
and pokes() and peeks()
maybe it translates the ASCII to unicode.
Bernd
			
			
									
									
						use an extra buffer
and pokes() and peeks()
maybe it translates the ASCII to unicode.
Bernd
Re: LAN info - Windows only
Like this:
			
			
									
									
						Code: Select all
Procedure.s Translate(Ascii$)
  
  Protected Translate$
  
  
  Translate$ = Space(StringByteLength(Ascii$) * 2)
  
  PokeS(@Translate$, Ascii$, -1, #PB_Unicode)
  
  ProcedureReturn PeekS(@Translate$, -1, #PB_Ascii)
  
EndProcedure
- doctorized
- Addict 
- Posts: 882
- Joined: Fri Mar 27, 2009 9:41 am
- Location: Athens, Greece
Re: LAN info - Windows only
I used your procedure like this:infratec wrote:Like this:Code: Select all
Procedure.s Translate(Ascii$) Protected Translate$ Translate$ = Space(StringByteLength(Ascii$) * 2) PokeS(@Translate$, Ascii$, -1, #PB_Unicode) ProcedureReturn PeekS(@Translate$, -1, #PB_Ascii) EndProcedure
Code: Select all
Debug Translate(PeekS(@MIB_IFTABLE\table[ii]\bDescr,-1,#PB_Ascii))Re: LAN info - Windows only
I changed something in the code,
maybe you have not used the latest version.
Or try to use #PB_Unicode instead of #PB_Ascii.
Since I have no access to such a PC, I can test nothing for you. 
 
Bernd
			
			
									
									
						maybe you have not used the latest version.
Or try to use #PB_Unicode instead of #PB_Ascii.
Since I have no access to such a PC, I can test nothing for you.
 
 Bernd
Re: LAN info - Windows only
Hi,
a last try:
Than you can use something like that:
But you have to enable Unicode Executable in compiler options,
else nothing is translated.
Bernd
			
			
									
									
						a last try:
Code: Select all
Procedure.s TranslateASCII(*Ascii, StringByteLength.i=-1)
  
  ProcedureReturn PeekS(*Ascii, StringByteLength, #PB_Ascii)
  
EndProcedure
Code: Select all
Debug TranslateASCII(@*MIBIfTable\table[i]\bDescr[0], *MIBIfTable\table[i]\dwDescrLen)else nothing is translated.
Bernd
- doctorized
- Addict 
- Posts: 882
- Joined: Fri Mar 27, 2009 9:41 am
- Location: Athens, Greece
Re: LAN info - Windows only
It doesn't help.infratec wrote:a last try:
Code: Select all
Procedure.s TranslateASCII(*Ascii, StringByteLength.i=-1) ProcedureReturn PeekS(*Ascii, StringByteLength, #PB_Ascii) EndProcedure
Unicode is always enabled.infratec wrote: But you have to enable Unicode Executable in compiler options,
else nothing is translated.
I think this problem must occur also in computers with other OS languages like german, or spanish as many languages like them have "non-english" chars in their alfabet. Users with motherboards that have nForce bridge like MSI NF750 that I have may prove it.



