Recentemente mi sono imbattuto nella necessita' di poter chiudere una connessione dial up da codice, dopo svariate ricerche ero quasi sconcertato che non ci fosse una via in vb net per farlo.
Per chiudere una connessione abbiamo diverse possibilita' :
Usare il WinINet : http://msdn.microsoft.com/en-us/library/aa385473(VS.85).aspx
La funzione
InternetHangUp ( http://msdn.microsoft.com/en-us/library/aa384737(VS.85).aspx )
puo' chiudere una connessione dialup solo se e' stata aperta dalla
InternetDial (http://msdn.microsoft.com/en-us/library/aa384587(VS.85).aspx )
questa limitazione ad oggi non ha trovato ancora una soluzione.
NB: per win Vista utilizzare le funzioni RAS ( http://msdn.microsoft.com/en-us/library/aa446739(VS.85).aspx )
una bella PEZZA potrebbe essere quella di utilizzare da riga di comando la "RasDial" con il parametro [nome] / disconnect
il nome della connessione puo' essere facilmente reperito
tramire la GetAllNetworkInterfaces :
'carico le connessioni attive in una combobox
Dim adapters As NetworkInterface() = NetworkInterface.GetAllNetworkInterfaces
Dim adapter As NetworkInterface
For Each adapter In adapters
if adapter.NetworkInterfaceType = NetworkInterfaceType.Ppp then ' controllo se sia una connessione dialup
ComboBox1.Items.Add(adapter.Name)
end if
Next
Dopo aver trovato la nostra connessione la possiamo chiudere :
Disconnect(combobox1.text)
qui la sub che effettua la chiusura
Sub Disconnect(myConnection)
Dim MyProcess As New System.Diagnostics.Process
MyProcess.StartInfo.FileName = "rasdial"
MyProcess.StartInfo.Arguments = Chr(34) & myConnection & Chr(34) & " /disconnect"
MyProcess.StartInfo.UseShellExecute = False
MyProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
MyProcess.Start()
MyProcess.WaitForExit()
MyProcess.Close()
End Sub
FINE !