Получить список установленных сетевых карт - PullRequest
0 голосов
/ 31 октября 2011

Я хочу заполнить поле со всеми именами установленных сетевых адаптеров, используя Visual Basic 6.0.Есть ли способ сделать это?Я также хочу знать, как добавить, изменить и удалить значение реестра?

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Самый простой способ - это выполнить команду ipconfig, перенаправить вывод в файл, а затем проанализировать файл.Существует много реализаций функции, которая обычно называется ShellAndWait ().Я взял один, который у меня забрел, - он может быть не лучшим, но он работает.

Option Explicit

Private Declare Function CloseHandle Lib "Kernel32.dll" ( _
    ByVal hHandle As Long _
) As Long

Private Declare Function OpenProcess Lib "Kernel32.dll" ( _
    ByVal dwDesiredAccess As Long, _
    ByVal bInheritHandle As Long, _
    ByVal dwProcessId As Long _
) As Long

Private Declare Function WaitForSingleObject Lib "Kernel32.dll" ( _
    ByVal hHandle As Long, _
    ByVal dwMilliseconds As Long _
) As Long


Private Const INFINITE As Long = -1&
Private Const SYNCHRONIZE As Long = &H100000

Private Sub Form_Load()

    Dim oNetworkAdapters As VBA.Collection
    Dim vNetworkAdapter As Variant

    Set oNetworkAdapters = GetNetworkAdapters()

    cmbNICs.Clear
    For Each vNetworkAdapter In oNetworkAdapters
        cmbNICs.AddItem vNetworkAdapter
    Next vNetworkAdapter

End Sub

Public Function GetNetworkAdapters() As VBA.Collection

    Dim sTempFileName   As String
    Dim nFileNo         As Integer
    Dim sLine           As String
    Dim oNetworkAdapters As VBA.Collection

    Set oNetworkAdapters = New VBA.Collection

    sTempFileName = Environ$("TEMP") & "\VBTmp" & Format$(Now, "yyyymmddhhnnss")

    If ShellAndWait("cmd.exe /c ipconfig > """ & sTempFileName & """", vbHide) Then

        nFileNo = FreeFile

        Open sTempFileName For Input As #nFileNo

        Do Until EOF(nFileNo)
            Line Input #nFileNo, sLine
            If Len(sLine) > 0 Then
                If sLine Like "*:" Then
                    If Not sLine Like "  *:" Then
                        oNetworkAdapters.Add sLine
                    End If
                End If
            End If
        Loop

        Close #nFileNo

        Kill sTempFileName

    End If

    Set GetNetworkAdapters = oNetworkAdapters

End Function

' Start the indicated program and wait for it to finish, hiding while we wait.
Public Function ShellAndWait(ByRef in_sProgramName As String, _
                             ByVal in_enmWindowStyle As VbAppWinStyle) As Boolean

    Dim nProcessId      As Long
    Dim hProcess        As Long

    ' Start the program.
    On Error GoTo ShellError
    nProcessId = Shell(in_sProgramName, in_enmWindowStyle)
    On Error GoTo 0

    DoEvents

    ' Wait for the program to finish.
    ' Get the process handle.
    hProcess = OpenProcess(SYNCHRONIZE, 0, nProcessId)
    If hProcess <> 0 Then
        WaitForSingleObject hProcess, INFINITE
        CloseHandle hProcess
    End If

    ShellAndWait = True

    Exit Function

ShellError:
    MsgBox "Error starting task '" & in_sProgramName & "'" & vbCrLf & Err.Description, vbOKOnly Or vbExclamation, "Error"
End Function
0 голосов
/ 08 августа 2015

Вот простой код, который обнаружит все Ethernet и беспроводные адаптеры

 NetworkInterface slectedNic;
IEnumerable<NetworkInterface> nics = NetworkInterface.GetAllNetworkInterfaces().Where(network => network.OperationalStatus == OperationalStatus.Up && (network.NetworkInterfaceType == NetworkInterfaceType.Ethernet || network.NetworkInterfaceType == NetworkInterfaceType.Wireless80211));
foreach (NetworkInterface item in nics)
        {
           cmbAdptors.Items.Add(item);
        }

но если вы хотите обнаружить только активный беспроводной адаптер

изменить

 .Where(network => network.OperationalStatus == OperationalStatus.Up && (network.NetworkInterfaceType == NetworkInterfaceType.Ethernet || network.NetworkInterfaceType == NetworkInterfaceType.Wireless80211));

до

 .Where(network => network.OperationalStatus == OperationalStatus.Up && network.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
...