Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1108to1112
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

laufwerksmapping vba

laufwerksmapping vba
olaf
Hallo zusammen,
habe ein kleines Problem, bei dem ich Hilfe benötige.
Ich habe mir ein Tool zusammengebastelt, mit dem ich alle Rechner im Blick habe, die ich in meinem Bereich betreue.
U.a. kann ich die Administrator-Freigaben C$ und D$ mappen.
Bei vielen Rechnern sind die Adminpassworte unterschiedlich, bei einigen gibt es garkeine.
Genau bei letzteren habe ich das Problem, das ich ein "nicht vorhandenes" Passwort nicht simulieren kann.
Ohne Eingabe gehts nicht und mit einem CHR(13) klappt es auch nicht, ein einfaches "ENTER" zu simulieren.
Hat jemand ´n Tipp ?
Hier mal den Beispielcode aus meinem Tool...
Zur Info : listbox1.value enthält den Hostnamen der gamappt werden soll, lw beinhaltet C$ oder D$
Das CHR(13) soll bei der Kennwortabfrage im DOS-Fenster das Drücken der Enter-Taste simuliernen (klappt aber nicht)
Jetzt der Code:
If blabla Then Shell ("cmd /c net use \\" & uf1.ListBox1.Value & "\" & lw & "$ /u:" & uf1.ListBox1.Value & "\administrator" & Chr(13))
Wie gesagt: Es klappt alles wunderbar MIT Passwort aber ohne .....

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
vielleicht geht auch bei Dir damit...
12.10.2009 20:28:17
Tino
Hallo,
habe dies auch mal umsetzen müssen, ich habe folgende Lösung im VB6 Bereich gefunden
und auf Excel etwas umgebaut.
Funktioniert bei mir super und ist 10mal schneller beim verbinden und trennen als die Dos befehle.
Vielleicht funktioniert es ja auch bei Dir oder Du kannst es zum laufen bringen.
Option Explicit
Option Private Module
' Konstantenwert für Fehlerfreiheit: 
Private Const NO_ERROR As Long = 0&
   
' Flags-Wert: Verbindung bei Neustart wieder herstellen 
Private Const CONNECT_UPDATE_PROFILE  As Long = &H1
   
' Mögliche Konstante für NETRESOURCE 
Private Const RESOURCETYPE_DISK As Long = &H1
Private Const RESOURCETYPE_PRINT As Long = &H2
Private Const RESOURCETYPE_ANY As Long = &H0
Private Const RESOURCE_CONNECTED As Long = &H1
Private Const RESOURCE_REMEMBERED As Long = &H3
Private Const RESOURCE_GLOBALNET As Long = &H2
Private Const RESOURCEDISPLAYTYPE_DOMAIN  As Long = &H1
Private Const RESOURCEDISPLAYTYPE_GENERIC  As Long = &H0
Private Const RESOURCEDISPLAYTYPE_SERVER  As Long = &H2
Private Const RESOURCEDISPLAYTYPE_SHARE  As Long = &H3
Private Const RESOURCEUSAGE_CONNECTABLE  As Long = &H1
Private Const RESOURCEUSAGE_CONTAINER  As Long = &H2
   

' Netzwerkressourcentyp NETRESOURCE 
Private Type NETRESOURCE
  dwScope As Long
  dwType As Long
  dwDisplayType As Long
  dwUsage As Long
  lpLocalName As String
  lpRemoteName As String 
  lpComment As String
  lpProvider As String
End Type
   
' WNetAddConnection2 stellt Netzlaufwerksverbindungen her 
Private Declare Function WNetAddConnection2 _
  Lib "mpr.dll" Alias "WNetAddConnection2A" ( _
  ByRef lpNetResource As NETRESOURCE, _
  ByVal Password As String, _
  ByVal UserName As String, _
  ByVal Flags As Long _
  ) As Long
   
' WNetCancelConnection2 trennt bestehende Netzlaufwerke 
Private Declare Function WNetCancelConnection2 _
  Lib "mpr.dll" Alias "WNetCancelConnection2A" ( _
  ByVal Name As String, _
  ByVal Flags As Long, _
  ByVal fForce As Long _
  ) As Long
Public Function MapNetworkDrive2(ByVal UNCPath As String, _
                                 ByVal LocalPath As String, _
                                 Optional ByVal UserName As String, _
                                 Optional ByVal Password As String, _
                                 Optional ByVal Persistent As Boolean _
                                 ) As Boolean

Dim NetR As NETRESOURCE
Dim lResult As Long
Dim lPersist As Long
   
  ' LocalPath muss ein Buchstabe plus Doppelpunkt sein: 
  LocalPath = Left$(LocalPath, 1) & ":"
   
  ' NETRESOURCE-Struktur belegen: 
  With NetR
    .dwType = RESOURCETYPE_DISK
    .lpRemoteName = UNCPath 
    .lpLocalName = LocalPath
  End With
   
  ' Persistenz-Parameter berücksichtigen: 
  If Persistent Then
    lPersist = CONNECT_UPDATE_PROFILE
  End If
   
  ' Pfad als Netzwerklaufwerk einzubinden versuchen 
  lResult = WNetAddConnection2(NetR, Password, UserName, lPersist)
   
  ' Prüfung auf Erfolg anhand des Rückgabewerts: 
  If lResult = NO_ERROR Then
   
    ' Aktion erfolgreich 
    MapNetworkDrive2 = True
   
  Else

   MapNetworkDrive2 = False
  End If
   
End Function

   
Public Function LWtrennen(ByVal Name As String, _
                                    Optional ByVal Force As Boolean = True, _
                                    Optional ByVal Persistent As Boolean _
                                    ) ' As Boolean 

Dim lPersist As Long
Dim lResult As Long

   
  ' Persistenz-Parameter berücksichtigen: 
  If Persistent Then
    lPersist = CONNECT_UPDATE_PROFILE
  End If
   
  ' Netzwerkverbindung aufheben: 
  lResult = WNetCancelConnection2(Name, Persistent, CLng(Force))
   
  ' Erfolgsauswertung: 
  If lResult = NO_ERROR Then
 LWtrennen = True

  Else
LWtrennen = False
'APIErrorDescription (lResult) 
  End If
   
End Function
   
   
Public Function LW(Pfad As String, Laufwerk As String, Optional Password As String, Optional UserName As String) As Boolean
Dim UNCPath As String     ' UNC-Pfad im Netzwerk 
Dim LocalDrive As String  ' Lokaler Laufwerksbuchstabe 

  ' Parameter definieren 
  UNCPath = Pfad
  LocalDrive = Laufwerk

  ' Netzwerklaufwerk einzubinden versuchen 
  If MapNetworkDrive2(UNCPath, LocalDrive, Password, UserName) Then
   
    ' MapNetworkDrive war erfolgreich. 
    ' Erfolg an den Anwender melden 

   LW = True
  Else  ' MapNetworkDrive war nicht erfolgreich. 
   LW = False
 
  End If
   
End Function



'Beispiel Verwendung ********************************************************************************** 
Sub Beispiel()

If LW("\\" & "IP", "Laufwerk", "Passwort", "Passwort") = False Then
 MsgBox "nicht verbunden"
Else
 MsgBox "verbunden"
End If

'und trennen 
LWtrennen "K:"

End Sub

Gruß Tino
Anzeige
kleine Korrektur
13.10.2009 16:28:41
Tino
Hallo,
die Zeile muss natürlich so lauten
If LW("\\" & "IP", "Laufwerk", "Username", "Passwort") = False Then
sorry
Gruß Tino
AW: vielleicht geht auch bei Dir damit...
14.10.2009 00:17:38
olaf
Hi Tino,
Danke Dir für die schnelle und ausführliche Antwort.
Muss erstmal sehen, ob und wie ich das einbauen kann.
Habe noch die ein- oder andere Baustelle in meinem Tool, und Dein Vorschlag erscheint mir im ersten Moment recht komplex - da muß ich erstmal durchfinden .... :-)
Bis dahin ....
....Olaf

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige