Netzlaufwerk verbinden und trennen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Netzlaufwerk verbinden und trennen

    Hallo,

    ich habe das Script aus diesem Thread: Netzlaufwerk Verbinden und trennen mit Eingabe in Verwendung, das läuft auch Super, aber wie bekomme ich das hin, das ich mehre Laufwerke verbinden könnte....
    Es wäre toll wenn mir da jemand helfen könnte..

    Und die Trennen Funktion such ich leider auch noch, werde da nicht schlau raus.

    Es ist aber für mich ein sehr schönes Script daher Daumen hoch..

    EDIT: keine uralten Threads ausgraben! Neue Frage -> neuer Thread. Verschoben. ~fufu

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

    Andy2002 schrieb:

    Das habe ich bereits versucht

    Und was?
    Zeig uns doch mal den doe, so können wir nur ins blaue raten was du evtl. falsch machst.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Quellcode

    1. ​Imports System.Net
    2. Imports Microsoft.Win32
    3. Imports CSCore.XAudio2
    4. Imports CSCore.Visualization.WPF
    5. Public Class Form1
    6. Private Sub frmCombo_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    7. Dim GS As New ArrayList()
    8. GS.Add(New comboItem With {.Id = 1, .Text = "1Server", .SRV = "\\meine server"})
    9. GS.Add(New comboItem With {.Id = 2, .Text = "2Server", .SRV2 = "\\mein server2"})
    10. GS.Add(New comboItem With {.Id = 3, .Text = "3Server", .SRV3 = "\\server"})
    11. GS.Add(New comboItem With {.Id = 4, .Text = "4Archiv", .SRV4 = "\\server"})
    12. GS.Add(New comboItem With {.Id = 5, .Text = "5Server 2", .SRV5 = "\\server"})
    13. GS.Add(New comboItem With {.Id = 6, .Text = "AndyPI", .SRV6 = "\\lusitge ip\"})
    14. GS.Add(New comboItem With {.Id = 7, .Text = "Daten Server (Mit beschränkter Größe Pro Nutzer)", .SRV7 = "\\serverdaten"})
    15. ComboBox1.DisplayMember = "Text"
    16. ComboBox1.ValueMember = "Id"
    17. ComboBox1.DataSource = GS
    18. Label1.Text = "AndyNET Netzwerk Umgebung"
    19. Label2.Text = "Bitte einen Server wählen ->"
    20. Label3.Text = "Dein Benutzername:"
    21. Label4.Text = "Dein Password:"
    22. Label7.Text = "Gamma"
    23. Label6.Text = My.Resources.version
    24. UsernameBox.Text = My.Settings.benutzer
    25. PasswordBox.Text = My.Settings.passwort
    26. End Sub
    27. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    28. 'TextBox1.Text = CType(ComboBox1.SelectedItem, comboItem).SRV
    29. End Sub
    30. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    31. Dim Username As String = UsernameBox.Text
    32. Dim Password As String = PasswordBox.Text
    33. Dim Buchstabe As String
    34. Buchstabe = "V:"
    35. Dim Buchstabe3 As String
    36. Buchstabe3 = "S:"
    37. Dim Buchstabe2 As String
    38. Buchstabe2 = "P:"
    39. Dim Buchstabe4 As String
    40. Buchstabe4 = "M:"
    41. Dim Buchstabe5 As String
    42. Buchstabe5 = "N:"
    43. Dim Buchstabe6 As String
    44. Buchstabe6 = "O:"
    45. Dim Buchstabe7 As String
    46. Buchstabe7 = "R:"
    47. Dim HomeServer As String
    48. HomeServer = CType(ComboBox1.SelectedItem, comboItem).SRV
    49. System.Diagnostics.Process.Start("net.exe", "use " & Buchstabe & " " & HomeServer & " /user:" & Username & " " & Password)
    50. HomeServer = CType(ComboBox1.SelectedItem, comboItem).SRV2
    51. System.Diagnostics.Process.Start("net.exe", "use " & Buchstabe2 & " " & HomeServer & " /user:" & Username & " " & Password)
    52. HomeServer = CType(ComboBox1.SelectedItem, comboItem).SRV3
    53. System.Diagnostics.Process.Start("net.exe", "use " & Buchstabe3 & " " & HomeServer & " /user:" & Username & " " & Password)
    54. HomeServer = CType(ComboBox1.SelectedItem, comboItem).SRV4
    55. System.Diagnostics.Process.Start("net.exe", "use " & Buchstabe4 & " " & HomeServer & " /user:" & Username & " " & Password)
    56. HomeServer = CType(ComboBox1.SelectedItem, comboItem).SRV5
    57. System.Diagnostics.Process.Start("net.exe", "use " & Buchstabe5 & " " & HomeServer & " /user:" & Username & " " & Password)
    58. HomeServer = CType(ComboBox1.SelectedItem, comboItem).SRV6
    59. System.Diagnostics.Process.Start("net.exe", "use " & Buchstabe6 & " " & HomeServer & " /user:" & Username & " " & Password)
    60. HomeServer = CType(ComboBox1.SelectedItem, comboItem).SRV7
    61. System.Diagnostics.Process.Start("net.exe", "use " & Buchstabe7 & " " & HomeServer & " /user:" & Username & " " & Password)
    62. End Sub
    63. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    64. Application.Exit()
    65. End Sub
    66. Private Sub HilfeToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HilfeToolStripMenuItem.Click
    67. Hilfe.Show()
    68. Me.Hide()
    69. End Sub
    70. Private Sub NameSpeichernToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NameSpeichernToolStripMenuItem.Click
    71. save1.Show()
    72. End Sub
    73. Private Sub PasswortSpeichernToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PasswortSpeichernToolStripMenuItem.Click
    74. save2.Show()
    75. End Sub
    76. Private Sub LaufwerkTrennenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles LaufwerkTrennenToolStripMenuItem.Click
    77. MsgBox("Diese Funktion ist noch nicht Eingebaut")
    78. End Sub
    79. Private Sub ZumProxyVerbindenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ZumProxyVerbindenToolStripMenuItem.Click
    80. erweitert.Show()
    81. Me.Hide()
    82. End Sub
    83. End Class
    84. Public Class comboItem
    85. Private _id As Integer
    86. Public Property Id() As Integer
    87. Get
    88. Return _id
    89. End Get
    90. Set(ByVal value As Integer)
    91. _id = value
    92. End Set
    93. End Property
    94. Private _text As String
    95. Public Property Text() As String
    96. Get
    97. Return _text
    98. End Get
    99. Set(ByVal value As String)
    100. _text = value
    101. End Set
    102. End Property
    103. Private _srv As String
    104. Public Property SRV() As String
    105. Get
    106. Return _srv
    107. End Get
    108. Set(ByVal value As String)
    109. _srv = value
    110. End Set
    111. End Property
    112. Private _srv2 As String
    113. Public Property SRV2() As String
    114. Get
    115. Return _srv2
    116. End Get
    117. Set(ByVal value As String)
    118. _srv2 = value
    119. End Set
    120. End Property
    121. Private _srv3 As String
    122. Public Property SRV3() As String
    123. Get
    124. Return _srv3
    125. End Get
    126. Set(ByVal value As String)
    127. _srv3 = value
    128. End Set
    129. End Property
    130. Private _srv4 As String
    131. Public Property SRV4() As String
    132. Get
    133. Return _srv4
    134. End Get
    135. Set(ByVal value As String)
    136. _srv4 = value
    137. End Set
    138. End Property
    139. Private _srv5 As String
    140. Public Property SRV5() As String
    141. Get
    142. Return _srv5
    143. End Get
    144. Set(ByVal value As String)
    145. _srv5 = value
    146. End Set
    147. End Property
    148. Private _srv6 As String
    149. Public Property SRV6() As String
    150. Get
    151. Return _srv6
    152. End Get
    153. Set(ByVal value As String)
    154. _srv6 = value
    155. End Set
    156. End Property
    157. Private _srv7 As String
    158. Public Property SRV7() As String
    159. Get
    160. Return _srv7
    161. End Get
    162. Set(ByVal value As String)
    163. _srv7 = value
    164. End Set
    165. End Property
    166. End Class


    Das mit mehre Laufwerke Verbinden hab ich hin bekommen.. Zwar nicht schön im code. Aber aussreichend.. jetzt Brauch ich nur noch irgendwie eine combobox listbox etc. womit ich einen server auswähle und den trennen kann..
    Meine Anregungen:

    1. Klasse comboItem umbenennen in NetzlaufwerkVerbindung (o.ä.). Zumindest so, dass es Sinn macht.

    2. NetzlaufwerkVerbindung hat diese Eigenschaften: ID,
    Name, Pfad, Username und Passwort

    3. List(Of NetzlaufwerkVerbindung) erstellen, füllen und der ComboBox als DataSource geben. Als DisplayMember eine der NetzlaufwerkVerbindung Eigenschaften geben.

    4. Bei Bedarf kannst du das in der Combobox gewählte Item als NetzlaufwerkVerbindung casten und auf das gesamte Objekt und dessen Eigenschaften zugreifen ->
    z.b.Dim nlv as NetzlaufwerkVerbindung = DirectCast(ComboBox1.SelectedItem, NetzlaufwerkVerbindung)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @Andy2002 gugst Du hier: vbforums.com/showthread.php?616519-Mapping-a-network-drive
    Ich hab das schon mal verwendet:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. 'This example maps the R drive to \\SomeServer\SomeShare
    4. Try
    5. NetworkDrive.MapNetworkDrive("\\SomeServer\SomeShare", "R"c, False, "Username", "Password")
    6. Catch ex As Exception
    7. MessageBox.Show("The network drive could not be mapped for the following reason: " & ex.Message)
    8. End Try
    9. End Sub
    10. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    11. 'Deletes the F drive
    12. 'Throws an exception if F is not a network drive
    13. NetworkDrive.RemoveNetworkDrive("F"c, True)
    14. End Sub
    15. End Class

    VB.NET-Quellcode

    1. Public Class NetworkDrive
    2. Private Sub New()
    3. ' nicht instanziierbar
    4. End Sub
    5. ''' <summary>
    6. ''' </summary>
    7. ''' <param name="lpNetResource">A NETRESOURCE structure that specifies information about the network resource connection</param>
    8. ''' <param name="lpPassword">The password to use for the connection - leave blank to use current user credentials</param>
    9. ''' <param name="lpUserName">The username to use for the connection - leave blank to use current user credentials</param>
    10. ''' <param name="dwFlags">Bitmask that specifies connection options. For example, whether or not to make the connection persistent</param>
    11. <DllImportAttribute("mpr.dll", EntryPoint:="WNetAddConnection2W")> _
    12. Public Shared Function WNetAddConnection2(ByRef lpNetResource As NETRESOURCE, <InAttribute(), MarshalAsAttribute(UnmanagedType.LPWStr)> ByVal lpPassword As String, <InAttribute(), MarshalAsAttribute(UnmanagedType.LPWStr)> ByVal lpUserName As String, ByVal dwFlags As UInteger) As UInteger
    13. End Function
    14. ''' <summary>
    15. ''' Deletes a connection to a network resource
    16. ''' </summary>
    17. ''' <param name="lpName">The name of the connection to delete (e.g drive letter)</param>
    18. ''' <param name="dwFlags">If this is a persistent connection set to CONNECT_UPDATE_PROFILE to prevent from being mapped again at next logon</param>
    19. ''' <param name="fForce">Delete connection even if files from this resource are still open</param>
    20. <DllImportAttribute("mpr.dll", EntryPoint:="WNetCancelConnectionW")> _
    21. Public Shared Function WNetCancelConnection(<InAttribute(), MarshalAsAttribute(UnmanagedType.LPWStr)> ByVal lpName As String, ByVal dwFlags As UInteger, <MarshalAsAttribute(UnmanagedType.Bool)> ByVal fForce As Boolean) As UInteger
    22. End Function
    23. 'Constants
    24. Public Const CONNECT_UPDATE_PROFILE As UInteger = 1
    25. Public Const NO_ERROR As UInteger = 0
    26. Public Const RESOURCETYPE_DISK As UInteger = 1
    27. ''' <summary>
    28. ''' Contains information about a network resource. Used by the WNetAddConnection2 method
    29. ''' </summary>
    30. <StructLayoutAttribute(LayoutKind.Sequential)> _
    31. Public Structure NETRESOURCE
    32. Public dwScope As UInteger
    33. Public dwType As UInteger
    34. Public dwDisplayType As UInteger
    35. Public dwUsage As UInteger
    36. <MarshalAsAttribute(UnmanagedType.LPWStr)> _
    37. Public lpLocalName As String
    38. <MarshalAsAttribute(UnmanagedType.LPWStr)> _
    39. Public lpRemoteName As String
    40. <MarshalAsAttribute(UnmanagedType.LPWStr)> _
    41. Public lpComment As String
    42. <MarshalAsAttribute(UnmanagedType.LPWStr)> _
    43. Public lpProvider As String
    44. End Structure
    45. ''' <summary>
    46. ''' Creates a network drive (aka mapped drive) using the specified drive letter, UNC path and optional credentials
    47. ''' </summary>
    48. ''' <param name="UncPath">The UNC path (\\servername\share) to map the drive letter to</param>
    49. ''' <param name="DriveLetter">The drive letter to use</param>
    50. ''' <param name="Persistent">False to have this drive removed when the user logs off. True to have the drive remembered.
    51. ''' This option is the equivelant of the Reconnect At Logon checkbox shown when mapping a drive in Windows Exporer</param>
    52. ''' <param name="ConnectionUsername">The username to use for the connection - optional</param>
    53. ''' <param name="ConnectionPassword">The password to use for the connection - optional</param>
    54. Public Shared Sub MapNetworkDrive(ByVal UncPath As String, ByVal DriveLetter As Char, ByVal Persistent As Boolean, Optional ByVal ConnectionUsername As String = Nothing, Optional ByVal ConnectionPassword As String = Nothing)
    55. If String.IsNullOrEmpty(UncPath) Then
    56. Throw New ArgumentException("No UNC path specified", "UncPath")
    57. End If
    58. Dim DriveInfo As New NETRESOURCE
    59. With DriveInfo
    60. .dwType = RESOURCETYPE_DISK
    61. .lpLocalName = DriveLetter & ":"
    62. .lpRemoteName = UncPath
    63. End With
    64. Dim flags As UInteger = 0
    65. If Persistent Then
    66. flags = &H1
    67. End If
    68. Dim Result As UInteger = WNetAddConnection2(DriveInfo, ConnectionPassword, ConnectionUsername, flags)
    69. If Result <> NO_ERROR Then
    70. Throw New System.ComponentModel.Win32Exception(CInt(Result))
    71. End If
    72. End Sub
    73. ''' <summary>
    74. ''' Deletes an existing mapped network drive
    75. ''' </summary>
    76. ''' <param name="DriveLetter">The drive letter to delete, must be a network drive</param>
    77. ''' <param name="Force">Force the drive to be deleted even if files are still open on this drive</param>
    78. Public Shared Sub RemoveNetworkDrive(ByVal DriveLetter As Char, ByVal Force As Boolean)
    79. Dim Result As UInteger = WNetCancelConnection(DriveLetter & ":", CONNECT_UPDATE_PROFILE, Force)
    80. If Not Result = NO_ERROR Then
    81. Throw New System.ComponentModel.Win32Exception(CInt(Result))
    82. End If
    83. End Sub
    84. End Class

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

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

    mrMo schrieb:

    Meine Anregungen:

    1. Klasse comboItem umbenennen in NetzlaufwerkVerbindung (o.ä.). Zumindest so, dass es Sinn macht.

    2. NetzlaufwerkVerbindung hat diese Eigenschaften: ID,
    Name, Pfad, Username und Passwort

    3. List(Of NetzlaufwerkVerbindung) erstellen, füllen und der ComboBox als DataSource geben. Als DisplayMember eine der NetzlaufwerkVerbindung Eigenschaften geben.

    4. Bei Bedarf kannst du das in der Combobox gewählte Item als NetzlaufwerkVerbindung casten und auf das gesamte Objekt und dessen Eigenschaften zugreifen ->
    z.b.Dim nlv as NetzlaufwerkVerbindung = DirectCast(ComboBox1.SelectedItem, NetzlaufwerkVerbindung)


    Naja die Klasse wollte ich noch in einen Modul auslagern.. Damit das ganze Übersichtlicher wird.
    Aber wie ich eben die Laufwerke wieder trennen kann hab ich noch nicht Herrausgefunden.. ( Stelle es mir so vor: LaufwerktrennentoolstripMenuClick -> Drauf klicken -> Alle Laufwerke die Verbunden sind werden getrennt, (Die Anzahl der Verbundenen Laufwerke ist da egal!)) Also ohne zusätzliche Form, combobox, Auswahl Menü etc.. Irgendwie so: System.Diagnostics.Process.Start("net.exe", "use " & Buchstabe & " " & HomeServer & " /-delete) -> Funktioniert nur nicht..
    @RodFromGermany hat oben doch bereits einen Vorschlag zum Verbinden und trennen der Netzlaufwerke gemacht. Tut der nicht?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Andy2002 schrieb:

    Aber wie ich eben die Laufwerke wieder trennen kann hab ich noch nicht Herrausgefunden.
    Fang an mit Lesen und verstehen.
    Im übrigen hätte ich meinen Post ebenfalls ignoriert. X(
    Gugst Du Zeile 83 in der Klasse NetworkDrive.
    ====
    @mrMo Ich denke mal, @Andy2002 hat den Code einfach überblättert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!