2011-03-10 37 views

回答

1

VB6沒有像在.NET中那樣直接在語言或運行時執行此操作的方法,但是Windows具有可通過COM訪問的廣泛管理界面。 Windows Management Instrumentation(WMI)是一個基於COM的界面,用於執行各種管理任務。在VB6中,COM自動化非常簡單。

我會建議看看由Microsoft腳本專家完成的VBScripts,http://technet.microsoft.com/en-us/scriptcenter/default。將VBScript移植到VB6應該是一個相對簡單的操作。這裏是VBScript的,你想要做什麼:
http://gallery.technet.microsoft.com/scriptcenter/ff7bc830-a67d-434e-9c77-ebe1ff7d6a4d

我沒有這臺機器上VB6讓你一個完美的代碼示例現在,但是,簡單地改變Wscript.Echo調用Debug.Print你幾乎可以在VB6中運行。

strcomputer = Inputbox("Name of Computer","Computer IP Query") 

Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 

Set colAdapters = objWMIService.ExecQuery _ 
    ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 

n = 1 

For Each objAdapter in colAdapters 
    Debug.Print "Network Adapter " & n 
    Debug.Print "=================" 
    Debug.Print " Description: " & objAdapter.Description 

    Debug.Print " Physical (MAC) address: " & objAdapter.MACAddress 
    Debug.Print " Host name:    " & objAdapter.DNSHostName 

    If Not IsNull(objAdapter.IPAddress) Then 
     For i = 0 To UBound(objAdapter.IPAddress) 
     Debug.Print " IP address:    " & objAdapter.IPAddress(i) 
     Next 
    End If 

    If Not IsNull(objAdapter.IPSubnet) Then 
     For i = 0 To UBound(objAdapter.IPSubnet) 
     Debug.Print " Subnet:     " & objAdapter.IPSubnet(i) 
     Next 
    End If 

    If Not IsNull(objAdapter.DefaultIPGateway) Then 
     For i = 0 To UBound(objAdapter.DefaultIPGateway) 
     Debug.Print " Default gateway:  " & _ 
      objAdapter.DefaultIPGateway(i) 
     Next 
    End If 

    Debug.Print 
    Debug.Print " DNS" 
    Debug.Print " ---" 
    Debug.Print " DNS servers in search order:" 

    If Not IsNull(objAdapter.DNSServerSearchOrder) Then 
     For i = 0 To UBound(objAdapter.DNSServerSearchOrder) 
     Debug.Print "  " & objAdapter.DNSServerSearchOrder(i) 
     Next 
    End If 

    Debug.Print " DNS domain: " & objAdapter.DNSDomain 

    If Not IsNull(objAdapter.DNSDomainSuffixSearchOrder) Then 
     For i = 0 To UBound(objAdapter.DNSDomainSuffixSearchOrder) 
     Debug.Print " DNS suffix search list: " & _ 
      objAdapter.DNSDomainSuffixSearchOrder(i) 
     Next 
    End If 

    Debug.Print 
    Debug.Print " DHCP" 
    Debug.Print " ----" 
    Debug.Print " DHCP enabled:  " & objAdapter.DHCPEnabled 
    Debug.Print " DHCP server:   " & objAdapter.DHCPServer 

    If Not IsNull(objAdapter.DHCPLeaseObtained) Then 
     utcLeaseObtained = objAdapter.DHCPLeaseObtained 
     strLeaseObtained = WMIDateStringToDate(utcLeaseObtained) 
    Else 
     strLeaseObtained = "" 
    End If 
    Debug.Print " DHCP lease obtained: " & strLeaseObtained 

    If Not IsNull(objAdapter.DHCPLeaseExpires) Then 
     utcLeaseExpires = objAdapter.DHCPLeaseExpires 
     strLeaseExpires = WMIDateStringToDate(utcLeaseExpires) 
    Else 
     strLeaseExpires = "" 
    End If 
    Debug.Print " DHCP lease expires: " & strLeaseExpires 

    Debug.Print 
    Debug.Print " WINS" 
    Debug.Print " ----" 
    Debug.Print " Primary WINS server: " & objAdapter.WINSPrimaryServer 
    Debug.Print " Secondary WINS server: " & objAdapter.WINSSecondaryServer 
    Debug.Print 

    n = n + 1 

Next 

Public Function WMIDateStringToDate(utcDate) 
    WMIDateStringToDate = CDate(Mid(utcDate, 5, 2) & "/" & _ 
     Mid(utcDate, 7, 2) & "/" & _ 
      Left(utcDate, 4) & " " & _ 
       Mid (utcDate, 9, 2) & ":" & _ 
        Mid(utcDate, 11, 2) & ":" & _ 
         Mid(utcDate, 13, 2)) 
End Function 
+1

最後一件事,我不會推薦在你的應用中粘貼這個VBScript代碼。我只是把它作爲一個演示,說明你可以用WMI COM自動化做什麼。你的應用程序應該正確地聲明變量,錯誤處理和所有好東西。 – 2011-03-10 05:37:30

+1

還要考慮WMI可能沒有安裝或運行在給定的系統上。 – Bob77 2011-03-10 16:58:02

相關問題