LAN info - Windows only

Share your advanced PureBasic knowledge/code with the community.
User avatar
doctorized
Addict
Addict
Posts: 882
Joined: Fri Mar 27, 2009 9:41 am
Location: Athens, Greece

LAN info - Windows only

Post by doctorized »

Here is a code giving info about LAN cards and connections (Unicode support).
You can also find it here: http://kc2000labs.shadowtavern.com/pb/z ... AN_520.rar

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[21]
 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_(@IP_ADAPTER_INFO(0), @lBufferLength)
	If lErrors <> #ERROR_SUCCESS: ProcedureReturn: EndIf
	lBufferPos.l
	For i.l=0 To 100
		LANInfo\AdapterName[i] = PeekS(@IP_ADAPTER_INFO(AdapterCount)\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
FuncName = Space(60)
PokeS(@FuncName,"GetNetworkParams",-1,#PB_Ascii)
If GetProcAddress_(hMod, FuncName) <> 0 
	xx = 0
	FIXED_INFO.FIXED_INFO1
	lErrors = GetNetworkParams_(@FIXED_INFO, @lBufferLength)
	With FIXED_INFO
		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
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)
AddGadgetItem(0,-1,""+Chr(10)+"")
For i=0 To 10
	If LANInfo\AdapterName[i] <> ""
		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   
Last edited by doctorized on Wed Aug 20, 2014 10:51 am, edited 4 times in total.
Fred
Administrator
Administrator
Posts: 18161
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Re: LAN info

Post by Fred »

If it's possible, it's better to post the full code in the "tips and tricks" section, as download tends to disappear over time and the topic becomes useless.
AAT
Enthusiast
Enthusiast
Posts: 259
Joined: Sun Jun 15, 2008 3:13 am
Location: Russia

Re: LAN info

Post by AAT »

Hi, doctorized!

Thanks a lot! The programm works fine in WinXP, PB5.30 x86.
Are your programm for Windows only? Add this info please.

Good luck!
User avatar
doctorized
Addict
Addict
Posts: 882
Joined: Fri Mar 27, 2009 9:41 am
Location: Athens, Greece

Re: LAN info

Post by doctorized »

AAT wrote:Are your programm for Windows only? Add this info please.
It uses Windows API, so it is Windows only. Sorry. I changed the title.
Fred
Administrator
Administrator
Posts: 18161
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Re: LAN info - Windows only

Post by Fred »

Nice work !
User avatar
skywalk
Addict
Addict
Posts: 4210
Joined: Wed Dec 23, 2009 10:14 pm
Location: Boston, MA

Re: LAN info - Windows only

Post by skywalk »

I only get blanks on v53 x86 unicode win7?
The nice thing about standards is there are so many to choose from. ~ Andrew Tanenbaum
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: LAN info - Windows only

Post by Kwai chang caine »

+1
With 5.23 and W7 :cry:
ImageThe happiness is a road...
Not a destination
User avatar
minimy
Enthusiast
Enthusiast
Posts: 552
Joined: Mon Jul 08, 2013 8:43 pm
Location: off world

Re: LAN info - Windows only

Post by minimy »

Return blank fields in Win7, thanks for share! I need install 5.3 and put in all libs.. :D
If translation=Error: reply="Sorry, Im Spanish": Endif
User avatar
minimy
Enthusiast
Enthusiast
Posts: 552
Joined: Mon Jul 08, 2013 8:43 pm
Location: off world

Re: LAN info - Windows only

Post by minimy »

I try in 5.21 and blank field return.
If translation=Error: reply="Sorry, Im Spanish": Endif
infratec
Always Here
Always Here
Posts: 7577
Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany

Re: LAN info - Windows only

Post by infratec »

Hi,

it fails also on my PC: Win 7 64 bit with PB 5.30 X86

GetAdaptersInfo() returns an ERROR_BUFFER_OVERFLOW
And as result it tells me that the structure needs a size of 1920 bytes.
If I add a Dummy.a[1500] at the structure, the function returns with success,
but than the programm stops at an other point.

Bernd
infratec
Always Here
Always Here
Posts: 7577
Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany

Re: LAN info - Windows only

Post by infratec »

Your fault is:

If I have more network adapters, the function returns all Infos at once.
But since your memory has only place for one, it fails.
infratec
Always Here
Always Here
Posts: 7577
Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany

Re: LAN info - Windows only

Post by infratec »

You need something like this:

Code: Select all

    lBufferLength.l = 0
    lErrors = GetAdaptersInfo_(@IP_ADAPTER_INFO(0), @lBufferLength)
    
    If lErrors = 111
      AdapterCount = lBufferLength / SizeOf(IP_ADAPTER_INFO1)
      ReDim IP_ADAPTER_INFO(AdapterCount)
      ;ReDim LANInfo(AdapterCount)
    EndIf

    lBufferLength = AdapterCount * SizeOf(IP_ADAPTER_INFO1)
    lErrors = GetAdaptersInfo_(@IP_ADAPTER_INFO(0), @lBufferLength)
But it fails later.

Bernd
infratec
Always Here
Always Here
Posts: 7577
Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany

Re: LAN info - Windows only

Post by infratec »

Hi,

a version that works on my PC:

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

#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


Structure IP_ADDRESS_STRING
  String.a[16]
EndStructure

Structure IP_MASK_STRING
  String.a[16]
EndStructure

Structure IP_ADDR_STRING1
  NextAdapter.i
  IpAddress.IP_ADDRESS_STRING
  IpMask.IP_ADDRESS_STRING
  Context.i
EndStructure

Structure FIXED_INFO1
  HostName.a[#MAX_HOSTNAME_LEN + 4]
  DomainName.a[#MAX_DOMAIN_NAME_LEN + 4]
  CurrentDnsServer.i
  DnsServerList.IP_ADDR_STRING1
  NodeType.l
  ScopeId.a[#MAX_SCOPE_ID_LEN + 4]
  EnableRouting.l
  EnableProxy.l
  EnableDns.l
EndStructure

Structure IP_ADAPTER_INFO1
  *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_STRING1
  IpAddressList.IP_ADDR_STRING1
  GatewayList.IP_ADDR_STRING1
  DhcpServer.IP_ADDR_STRING1
  HaveWINS.l
  PrimaryWinsServer.IP_ADDR_STRING1
  SecondaryWinsServer.IP_ADDR_STRING1
  LeaseObtained.l
  LeaseExpires.l
EndStructure

Structure MIB_IFROW
  wszName.a[#MAX_INTERFACE_NAME_LEN * 2]
  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_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(0)
Global NewList NICs.s()
Global GroupDemicals.s = ","
Global GroupThousands.s = "."
Global LANInfo.NetWorkInfo
;Global Dim LANInfo.NetWorkInfo(0)
 
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()
  
  Protected.i AdapterCount, MIBCount
  
  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_(@IP_ADAPTER_INFO(0), @lBufferLength)
    
    If lErrors = 111
      AdapterCount = lBufferLength / SizeOf(IP_ADAPTER_INFO1)
      ReDim IP_ADAPTER_INFO(AdapterCount)
      ;ReDim LANInfo(AdapterCount)
    EndIf
    lBufferLength = AdapterCount * SizeOf(IP_ADAPTER_INFO1)
    
    ;lBufferLength.l = SizeOf(IP_ADAPTER_INFO1)
    lErrors = GetAdaptersInfo_(@IP_ADAPTER_INFO(0), @lBufferLength)
    If lErrors <> #ERROR_SUCCESS: ProcedureReturn: EndIf
    lBufferPos.l
    For i=0 To AdapterCount - 1
      ;Debug PeekS(@IP_ADAPTER_INFO(i)\AdapterName, #MAX_ADAPTER_NAME_LENGTH + 4, #PB_Ascii)
      ;Debug PeekS(@IP_ADAPTER_INFO(i)\Description, #MAX_ADAPTER_DESCRIPTION_LENGTH + 4, #PB_Ascii)
      LANInfo\AdapterName[i] = PeekS(@IP_ADAPTER_INFO(i)\Description, #MAX_ADAPTER_DESCRIPTION_LENGTH + 4,#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 = 0
    lErrors = GetIfTable_(@MIB_IFTABLE, @lSize, 0)
    
    If lErrors = 122
      If lSize > SizeOf(MIB_IFTABLE1)
        MessageRequester("Error", "MIB_IFTABLE has to less entries")
      EndIf
    EndIf
    
    ;lSize = SizeOf(MIB_IFTABLE1)
    lErrors = GetIfTable_(@MIB_IFTABLE, @lSize, 0)
    
    Debug MIB_IFTABLE\dwNumEntries
    
    ;For i = 0 To MIB_IFTABLE\dwNumEntries - 1
    ;  Debug PeekS(@MIB_IFTABLE\table[i]\bDescr[0], MIB_IFTABLE\table[i]\dwDescrLen, #PB_Ascii)
    ;  Debug PeekS(@MIB_IFTABLE\table[i]\wszName[0], #MAX_INTERFACE_NAME_LEN, #PB_Unicode)
    ;Next i
    
  EndIf
  FuncName = Space(60)
  PokeS(@FuncName,"GetNetworkParams",-1,#PB_Ascii)
  If GetProcAddress_(hMod, FuncName) <> 0
    xx = 0
    FIXED_INFO.FIXED_INFO1
    lBufferLength = SizeOf(FIXED_INFO1)
    lErrors = GetNetworkParams_(@FIXED_INFO, @lBufferLength)
    With FIXED_INFO
      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\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 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 MIB_IFTABLE\dwNumEntries - 1
       If PeekS(@MIB_IFTABLE\table[ii]\bDescr, MIB_IFTABLE\table[ii]\dwDescrLen, #PB_Ascii) = LANInfo\AdapterName[i]
         
         Debug "Found " + 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)
AddGadgetItem(0,-1,""+Chr(10)+"")
For i=0 To 10
  If LANInfo\AdapterName[i] <> ""
    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
Please test it.

But the code is a bit strange for me:
Why not use Import or OpenLibrary() :?:

Bernd
Last edited by infratec on Thu Aug 21, 2014 9:58 am, edited 2 times in total.
infratec
Always Here
Always Here
Posts: 7577
Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany

Re: LAN info - Windows only

Post by infratec »

Uah...

GetIfTable_() fails on my PC

Stay tuned.
Last edited by infratec on Thu Aug 21, 2014 10:00 am, edited 1 time in total.
infratec
Always Here
Always Here
Posts: 7577
Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany

Re: LAN info - Windows only

Post by infratec »

I found the fault:

The dimension of

Code: Select all

table.MIB_IFROW[]
was to small.
I increased it now from 21 to 50.

But it should be done dynamically by the return value of lSize.

I changed the code above.

There are many things to do.
Many things depends on 'I hope no more entries are required'.

But no more time left :cry:

Bernd
Post Reply