LAN info - Windows only
- doctorized
- Addict
- Posts: 856
- 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: 856
- 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: 856
- 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: 856
- 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: 856
- 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: 856
- 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.