|
|
![]() |
|
||
|
|
|||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Visual Basic
WMI Network Services Obtaining Network Adapter Configuration using WMI |
|
| Posted: | Monday March 04, 2002 |
| Updated: | Monday November 28, 2011 |
| Applies to: | VB5, VB6 |
| Developed with: | VB6, Windows XP |
| OS restrictions: | Windows NT, 2000, XP. See Prerequisites below. |
| Author: | VBnet - Randy Birch |
|
Related: |
Win32_NetworkAdapter: WMI Network Adapter Info |
| Prerequisites | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Windows Script Host is built into Microsoft Windows 98, 2000, ME and XP.
If you are running Windows 95 or NT4, you can download Windows Script
Host from the Microsoft Windows Script Technologies Web site at
http://msdn.microsoft.com/scripting/.
Some information is not returned on non-NT-based systems. A reference set in Projects / References to the Microsoft WMI Scripting Library. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Windows Management Instrumentation (WMI), a kernel-level instrumentation
technology for the Microsoft® Windows® platform. WMI provides the basis
for hardware instrumentation in future Windows environments. Close
coupling of WMI with services developed to conform to the Web-Based
Enterprise Management (WBEM) initiative will allow Microsoft to simplify
instrumentation and provide consistent, open access to management data.
WMI publishes information, configures device settings, and supplies
event notification from device drivers. WMI is part of the Win32®
Driver Model (WDM) architecture. However, it has broad utility and can
be used with other types of drivers as well (such as SCSI and NDIS).
WMI also allows a management application to configure a device, which
may need to do this because of some driver-raised event or because of
the data collected by the management application. This demo shows how to retrieve network adapter information for all installed and running network provider services, including network adapters and mini-ports loaded within the context of the operating system or user. The actual code is contained in the wmiNetAdapterConfig routine; the majority of the code below supports extracting the DHCP Lease date and time information from the values returned by WMI. This demo and illustration only show some of the available information from the class. For a complete listing see the table in the Comments section below. Note that some systems may not return information in all class properties. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| BAS Module Code | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| None. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Form Code | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| To a form add a command button (Command1) and a listview (Listview1). Set a reference in Projects / References to the Microsoft WMI Scripting Library, and add the following to the form: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '/* Below used for listview column auto-resizing
Private Const LVM_FIRST As Long = &H1000
Private Const LVM_SETCOLUMNWIDTH As Long = (LVM_FIRST + 30)
Private Const LVSCW_AUTOSIZE As Long = -1
Private Const LVSCW_AUTOSIZE_USEHEADER As Long = -2
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Private Sub Form_Load()
With ListView1
.ListItems.Clear
.ColumnHeaders.Clear
.ColumnHeaders.Add , , "NIC"
.ColumnHeaders.Add , , "MAC"
.ColumnHeaders.Add , , "IP Addr"
.ColumnHeaders.Add , , "DHCP Svr"
.ColumnHeaders.Add , , "LeaseObt"
.ColumnHeaders.Add , , "LeaseExp"
.ColumnHeaders.Add , , "WINS"
.ColumnHeaders.Add , , "Host"
.ColumnHeaders.Add , , "Domain"
.ColumnHeaders.Add , , "NIC Name"
.View = lvwReport
.Sorted = False
End With
Command1.Caption = "Get Adapter Config"
End Sub
Private Sub Command1_Click()
ListView1.ListItems.Clear
Call wmiNetAdapterConfig
Call lvAutosizeControl(ListView1)
End Sub
Private Sub lvAutosizeControl(lv As ListView)
Dim col2adjust As Long
'/* Size each column based on the maximum of
'/* EITHER the columnheader text width, or,
'/* if the items below it are wider, the
'/* widest list item in the column
For col2adjust = 0 To lv.ColumnHeaders.Count - 1
Call SendMessage(lv.hwnd, _
LVM_SETCOLUMNWIDTH, _
col2adjust, _
ByVal LVSCW_AUTOSIZE_USEHEADER)
Next
End Sub
Private Function SplitDateTimeBias(ByVal leasedate As String, _
leasedatepart As String, _
leasetimepart As String) As Long
'takes a datetime returned by the
'Win32_NetworkAdapterConfiguration
'and splits out the date and time
'components, returns them in the
'leasedatepart and leasetimepart
'passed variables, and returns the
'bias to be applied to the resultant date.
Dim pos As Long
Dim bias As Long
pos = InStr(leasedate, ".")
If pos > 0 Then
bias = StripTimeZoneBias(leasedate)
leasedatepart = Left$(leasedate, 8)
leasetimepart = Mid$(leasedate, 9, pos - Len(leasedatepart) - 1)
leasedatepart = InsertInString(leasedatepart, "-", 5, "")
leasedatepart = InsertInString(leasedatepart, "-", 8, "")
leasetimepart = InsertInString(leasetimepart, ":", 3, "")
leasetimepart = InsertInString(leasetimepart, ":", 6, "")
SplitDateTimeBias = bias
Else
End If
End Function
Private Function InsertInString(ByVal sOriginal As String, _
sReplace As String, _
nField As Long, _
sDelimeter As String) As String
'c 1998 Mario Lavignasse
'Abbott Scientific
'Replaces or inserts a string into a (any char) delimeted string
'
'Syntax:
'sOriginal: string of interest, returned unchanged
'sReplace: replacement or insert chr(s)
'nField: 1-based position for the insert/replace to begin
'sDelimeter: string to insert/replace. If empty, sReplace is
' inserted, if present sDelimeter is replaced by sReplace.
'
'Examples:
'Inserting:
' x = InsertInString("Hello World", "Hello ", 7, "")
' (x="Hello Hello World")
'
'Replacing:
' x = InsertInString("Hello World", "Hello ", 7, "World")
' (x="Hello Hello")
Dim nCount As Long
Dim nStart As Long
Dim nLast As Long
Do While InStr(nStart + 1, sOriginal, sDelimeter) > 0
nStart = InStr(nStart + 1, sOriginal, sDelimeter)
nCount = nCount + 1
If nCount >= nField Then
Exit Do
End If
nLast = nStart
Loop
Select Case nCount
Case 1
InsertInString = sReplace & Mid$(sOriginal, nStart)
Case Is >= nField
InsertInString = Mid$(sOriginal, 1, nLast) & _
sReplace & Mid$(sOriginal, nStart)
Case Else
InsertInString = sOriginal & _
String$((nField - 1) - nCount, sDelimeter) & _
sReplace
End Select
End Function
Private Function StripTimeZoneBias(leasedate As String) As Long
Dim pos As Long
Dim tmp As String
pos = InStr(leasedate, "-")
If pos = 0 Then
pos = InStr(leasedate, "+")
If pos = 0 Then
StripTimeZoneBias = 0
Else
End If
Else
tmp = Mid$(leasedate, pos, Len(leasedate))
leasedate = Mid$(leasedate, 1, pos - 1)
StripTimeZoneBias = CLng(tmp)
End If
End Function
Private Sub wmiNetAdapterConfig()
Dim nicSet As SWbemObjectSet
Dim nic As SWbemObject
'working vars for the lease date/times and listview
Dim dtb As String
Dim d As String
Dim t As String
Dim bias As Long
Dim itmx As ListItem
'must have error handler enabled, as all
'adapters do not return all information
On Local Error Resume Next
Set nicSet = GetObject("winmgmts:{impersonationLevel=impersonate}"). _
InstancesOf("Win32_NetworkAdapterConfiguration")
For Each nic In nicSet
Set itmx = ListView1.ListItems.Add(, , nic.Index)
itmx.SubItems(1) = nic.MACAddress
If nic.IPEnabled Then
itmx.SubItems(2) = nic.IPAddress(0)
End If
If nic.DHCPEnabled Then
itmx.SubItems(3) = nic.DHCPServer
'if DHCPLeaseObtained is not null,
'call a method to extract the date,
'time and bias (dtb) from the lease date
'and show the results (time not shown)
If Not IsNull(nic.DHCPLeaseObtained) Then
dtb = nic.DHCPLeaseObtained
bias = SplitDateTimeBias(dtb, d, t)
itmx.SubItems(4) = Format$(d, "short date")
End If
'same again
If Not IsNull(nic.DHCPLeaseExpires) Then
dtb = nic.DHCPLeaseExpires
bias = SplitDateTimeBias(dtb, d, t)
itmx.SubItems(5) = Format$(d, "short date")
End If
End If
itmx.SubItems(6) = nic.DNSEnabledForWINSResolution
itmx.SubItems(7) = nic.DNSHostName
itmx.SubItems(8) = nic.DNSDomain
itmx.SubItems(9) = nic.Description
Next
End Sub
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comments | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
All information returned in the Win32_NetworkAdapterConfiguration
class (note that some systems may not return information in all class
properties):
|
|
|
|
|||||
|
|||||
|
|
|||||
|
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |
![]() |