Button deaktivieren wenn kein Internetverbindung

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von -Franky-.

    Button deaktivieren wenn kein Internetverbindung

    Hallo zusammen.
    Ich bräuchte mal Hilfe. Ich würde gerne in meinen Programm paar Buttos ausgrauen bzw deaktivieren wenn beim Programmstart oder während es läuft bei fehlender Internetverbindung.
    Wenn diese wieder da ist sollen die Buttons wieder aktiv sein. Auch wenn ein Neustart des Programmes erforderlich ist.

    Ich hoffe es kamm mir hier einer mit dem Code weiterhelfen. Vielen Dank schon mal.

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Das klingt vielleicht wie ein einfaches Thema ist aber etwas komplizierter.
    Wie definierst du "keine Internetverbindung"?
    Vielleicht beschreibst du erst mal den Kontext und was genau du erreichen möchtest.
    Pingst ne Internetseite, kriegste Antwort oder nich.
    Button.Enabled Eigenschaft ist zum Aktivieren/Deaktivieren

    Aber wäre glaub besser wenn du einfach den Button beim Klick prüfen lässt und entsprechend reagierst, anstatt anhaltend zu schauen.
    Dass das Internet plötzlich weg ist, ist ja schon eher eine spontane Sache und Seltenheit.
    Hi. Ich würde mal das COM-Interface INetworkListManager ausprobieren. -> learn.microsoft.com/de-de/wind…stmgr-inetworklistmanager
    Hier gibt es zwei Methoden zum prüfen. INetworkListManager::get_IsConnected und INetworkListManager::get_IsConnectedToInternet Über INetworkListManager::GetConnectivity bekommst auch noch raus ob Du einen Connect per IPV4 oder IPV6 bzw. beides hast.

    Edit: Der Vollständigkeit halber. Fix zusammengezimmert und alles in einer Form.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. Private Const S_OK As Integer = &H0
    4. Private Const CLSID_NetworkListManager As String = "dcb00c01-570f-4a9b-8d69-199fdba5723b"
    5. Private Const IID_INetworkListManager As String = "dcb00000-570f-4a9b-8d69-199fdba5723b"
    6. Private Enum NLM_CONNECTIVITY As Integer
    7. NLM_CONNECTIVITY_DISCONNECTED = &H0
    8. NLM_CONNECTIVITY_IPV4_NOTRAFFIC = &H1
    9. NLM_CONNECTIVITY_IPV6_NOTRAFFIC = &H2
    10. NLM_CONNECTIVITY_IPV4_SUBNET = &H10
    11. NLM_CONNECTIVITY_IPV4_LOCALNETWORK = &H20
    12. NLM_CONNECTIVITY_IPV4_INTERNET = &H40
    13. NLM_CONNECTIVITY_IPV6_SUBNET = &H100
    14. NLM_CONNECTIVITY_IPV6_LOCALNETWORK = &H200
    15. NLM_CONNECTIVITY_IPV6_INTERNET = &H400
    16. End Enum
    17. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    18. Dim NetworkListManager As INetworkListManager = DirectCast(Activator.CreateInstance(Type.GetTypeFromCLSID(
    19. New Guid(CLSID_NetworkListManager))),
    20. INetworkListManager)
    21. If NetworkListManager IsNot Nothing Then
    22. Dim IsConnected As Boolean
    23. If NetworkListManager.Get_IsConnected(IsConnected) = S_OK Then
    24. Debug.Print("IsConnected = " & IsConnected.ToString)
    25. End If
    26. Dim IsConnectedToInternet As Boolean
    27. If NetworkListManager.Get_IsConnectedToInternet(IsConnectedToInternet) = S_OK Then
    28. Debug.Print("IsConnectedToInternet = " & IsConnectedToInternet.ToString)
    29. End If
    30. Dim Connectivity As NLM_CONNECTIVITY
    31. If NetworkListManager.GetConnectivity(Connectivity) = S_OK Then
    32. If Connectivity = NLM_CONNECTIVITY.NLM_CONNECTIVITY_DISCONNECTED Then
    33. Debug.Print("Connectivity = DISCONNECTED")
    34. Else
    35. If CBool(Connectivity And NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV4_NOTRAFFIC) Then Debug.Print("Connectivity = IPV4_NOTRAFFIC")
    36. If CBool(Connectivity And NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV6_NOTRAFFIC) Then Debug.Print("Connectivity = IPV6_NOTRAFFIC")
    37. If CBool(Connectivity And NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV4_SUBNET) Then Debug.Print("Connectivity = IPV4_SUBNET")
    38. If CBool(Connectivity And NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV4_LOCALNETWORK) Then Debug.Print("Connectivity = IPV4_LOCALNETWORK")
    39. If CBool(Connectivity And NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV4_INTERNET) Then Debug.Print("Connectivity = IPV4_INTERNET")
    40. If CBool(Connectivity And NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV6_SUBNET) Then Debug.Print("Connectivity = IPV6_SUBNET")
    41. If CBool(Connectivity And NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV6_LOCALNETWORK) Then Debug.Print("Connectivity = IPV6_LOCALNETWORK")
    42. If CBool(Connectivity And NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV6_INTERNET) Then Debug.Print("Connectivity = IPV6_INTERNET")
    43. End If
    44. End If
    45. Marshal.ReleaseComObject(NetworkListManager)
    46. End If
    47. End Sub
    48. <ComImport>
    49. <InterfaceType(ComInterfaceType.InterfaceIsIUnknown)>
    50. <Guid(IID_INetworkListManager)>
    51. Private Interface INetworkListManager
    52. ' IDispatch Methods
    53. <PreserveSig> Function GetTypeInfoCount() As Integer 'Dummy
    54. <PreserveSig> Function GetTypeInfo() As Integer 'Dummy
    55. <PreserveSig> Function GetIDsOfNames() As Integer 'Dummy
    56. <PreserveSig> Function Invoke() As Integer 'Dummy
    57. ' INetworkListManager Methods
    58. <PreserveSig> Function GetNetworks() As Integer 'Dummy
    59. <PreserveSig> Function GetNetwork() As Integer 'Dummy
    60. <PreserveSig> Function GetNetworkConnections() As Integer 'Dummy
    61. <PreserveSig> Function GetNetworkConnection() As Integer 'Dummy
    62. ' The get_IsConnectedToInternet property specifies if the local machine has internet connectivity.
    63. <PreserveSig> Function Get_IsConnectedToInternet(<Out, MarshalAs(UnmanagedType.Bool)> ByRef pbIsConnected As Boolean) As Integer
    64. ' The get_IsConnected property specifies if the local machine has network connectivity.
    65. <PreserveSig> Function Get_IsConnected(<Out, MarshalAs(UnmanagedType.Bool)> ByRef pbIsConnected As Boolean) As Integer
    66. ' The GetConnectivity method returns the overall connectivity state of the machine.
    67. <PreserveSig> Function GetConnectivity(<Out> ByRef pConnectivity As NLM_CONNECTIVITY) As Integer
    68. <PreserveSig> Function SetSimulatedProfileInfo() As Integer 'Dummy
    69. <PreserveSig> Function ClearSimulatedProfileInfo() As Integer 'Dummy
    70. End Interface
    71. End Class


    Mfg -Franky-

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „-Franky-“ ()

    Man kann es aber auch ganz einfach machen:

    1. prüfen ob generell eine Netzwerkverbindung besteht
    2. wenn eine Netzwerkverbindung besteht, dann einen Ping auf eine bekannte und zuverlässige IP durchführen.

    Für den ersten Schritt verwende ich das bei mir:
    (ich logge mit, wenn sich bei laufender Anwendung der Netzwerkstatus ändert - um dem Kunden zeigen zu können, dass das Netzwerk weg war und es kein Problem der Anwendung ist).

    VB.NET-Quellcode

    1. AddHandler My.Computer.Network.NetworkAvailabilityChanged, AddressOf MyComputerNetwork_NetworkAvailabilityChanged
    2. Private Sub MyComputerNetwork_NetworkAvailabilityChanged(sender As Object, e As Devices.NetworkAvailableEventArgs)
    3. msgbox ("Network: " + e.IsNetworkAvailable.ToString) ' Testausgabe fürs Forum
    4. End Sub
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Hi. Um wirklich eine sichere Aussage zu machen, müsste man erstmal in das Framework schauen was da unter My.Computer.Network verwendet wird um den Connect festzustellen bzw Änderungen zu signalisieren. Zumindest weiß ich das bis Framework 4.8.x noch viele veraltete Schnittstellen von Windows verwendet werden. Eventuell macht INetworkListManager::get_IsConnectedToInternet von sich aus bereits eine Prüfung ob ein bestimmter (MS) Server erreichbar ist. Müsste man mal mit Wireshark prüfen. Wenn ja, brauchst keinen extra Ping absetzen. Ansonsten bietet Windows so einiges an Schnittstellen an (learn.microsoft.com/de-de/windows/win32/api/netlistmgr/) die man sich mal anschauen könnte wie zB INetworkListManagerEvents.
    Mfg -Franky-

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „-Franky-“ ()