Einen von mehreren LAN-Verbindungen deaktivier/aktivieren

  • VB.NET
  • .NET (FX) 4.0

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von us4711.

    Einen von mehreren LAN-Verbindungen deaktivier/aktivieren

    Hallo liebe Programmiergemeinde,

    ich habe in meinem System mehrere LAN-Adapter (LAN-Verbindung 1, LAN-Verbindung 2, LAN-Verbindung 3).
    Nun möchte ich dies durch ein kleines Programm mit mehreren Buttons aktivieren bzw. deaktivieren (ich bin noch neu im Programmieren, also steinigt mich bitte nicht gleich ;) )

    Hierfür habe ich schon gegoogelt und auch ein Code in C gefunden. Mit C kenne ich mich jedoch nicht aus und habe es versucht in VB (Ich benutze Visual-Studio) zuschreiben.

    Der Original-Code in C sieht wie folgt aus :

    C#-Quellcode

    1. SelectQuery query = new SelectQuery("Win32_NetworkAdapter","NetConnectionStatus=2");
    2. 2ManagementObjectSearcher search = new ManagementObjectSearcher(query);
    3. 3foreach(ManagementObject result in search.Get())
    4. 4{
    5. 5 NetworkAdapter adapter = new NetworkAdapter(result);
    6. 6
    7. 7 // Identify the adapter you wish to disable here.
    8. 8 // In particular, check the AdapterType and
    9. 9 // Description properties.
    10. 10
    11. 11 // Here, we're selecting the LAN adapters.
    12. 12 if (adapter.AdapterType.Equals("Ethernet 802.3"))
    13. 13 {
    14. 14 adapter.Disable();
    15. 15 }
    16. 16}


    Mein Code in VB sieht so aus

    VB.NET-Quellcode

    1. Option Explicit On
    2. Option Strict On
    3. Imports System
    4. Imports System.Net.NetworkInformation
    5. Imports System.Management
    6. Public Class Form1
    7. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    8. End Sub
    9. Private Sub LAN1deakt_Click(sender As Object, e As EventArgs) Handles LAN1deakt.Click
    10. Dim query As New SelectQuery("Win32_NetworkAdapter", "NetConnectionStatus=2")
    11. Dim search As New ManagementObjectSearcher(query)
    12. For Each result As ManagementObject In search.[Get]()
    13. Dim adapter As New NetworkAdapter(result)
    14. If adapter.AdapterType.Equals("LAN-Verbindung 1") Then
    15. adapter.Disable()
    16. End If
    17. Next
    18. End Sub
    19. Private Sub LAN1aktiv_Click(sender As Object, e As EventArgs) Handles LAN1aktiv.Click
    20. Dim query As New SelectQuery("Win32_NetworkAdapter", "NetConnectionStatus=2")
    21. Dim search As New ManagementObjectSearcher(query)
    22. For Each result As ManagementObject In search.[Get]()
    23. Dim adapter As New NetworkAdapter(result)
    24. If adapter.AdapterType.Equals("LAN-Verbindung 1") Then
    25. adapter.Enabled()
    26. End If
    27. Next
    28. End Sub
    29. End Class


    Nun versteh ich nicht so ganz, warum mir 6 Typen (SelectQuery, ManagementObjectSearcher, ...) als nicht deklariert angezeigt werden!? Könntet ihr mir bitte weiterhelfen?
    @zauber777

    Also für mich siehts jetzt danach aus, als wenn du da noch eine fremde API einbinden musst...
    Also wenn du [STRG]+[ALT]+[L] drückst, öffnest du ja den Projektmappenexplorer.
    Dort doppelklickst du dann "My Project".
    Jetzt kommt ein Fenster mit vielen weiteren Menüpunkten auf der linken Seite.
    Da steht unter anderem "Verweise". Klickstdu drauf.
    Jetzt erscheint sone Liste, die mit "Verweise:" betitelt ist.
    Wenn da jetzt nur Einträge von "System.irgendwas" sind, dann fehlt dir eine API.
    Vielleicht noch mal auf der Seite schauen, wo du den Code her hast.
    bei mir wird z.b die SelectQuery auch unterringelt -> statt As New SelectQuery einfach As SelectQuery schreiben, dann unterringelts dir den Teil nicht mehr
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Sollte eigentl. mit der cmd gehen, also:

    VB.NET-Quellcode

    1. shell(netsh interface set interface name = "LAN-Verbindung1" admin=enabled)

    braucht allerdings Adminrechte sonst gibt er die Fehlermeldung, LAN-Verbindung sei nicht vorhanden

    admin=disabled: verbindung gekappt
    admin=enabled: verbunden

    (kann sein dass zwischen 'name' und '=' kein Leerzeichen hinkommt, ich glaube aber schon!
    Bei mir war das auch so, aber als ichs als Admin gestartet hatte, liefs.

    Noch was,was man tun könnte:

    gib in der cmd netsh interface show interface ein, dann zeigt er dir alle verfügbahren
    Adapter an, vllt. hieß der Adapter nur anders als man gedacht hat (oder einfach verschrieben)
    ok danke. das hört sich gut an. habe das projekt mir runtergeladen von microsoft und einfach ein release erstellt.
    Wenn ich diesen jedoch starte erhalte ich direkt einen Fehler "VBWMIEnabledDisabledNetworkAdapter hat ein Problem festgestellt und muss beendet werden". Ich habe auch nicht die Möglichkeit mir die Exception genauer anzeigen zulassen.
    Du benutzt System.Management. Füge darauf einfach einen Verweis hinzu. So geht's.

    @Radinator Hä? Das behebt das Problem in keinster Weise.
    @Kilian_98 In modernen .NET-Zeiten benutzt man die System.Diagnostics.Process-Klasse anstatt der Shell-Methode, die alter VB6-Ranz ist. Siehe auch Böses aus VB6/VB2003 - und die richtigen VB.NET-Alternativen.
    Mit freundlichen Grüßen,
    Thunderbolt
    Keine Ahnung, bei mir läuft's unter 4 ClientProfile einwandfrei. Zu welchem Zielframework wird's denn kompiliert?

    Es gibt bei MSDN auch noch die C#-Version. Teste doch mal, ob die funktioniert.