Hi,
        ich hab mal von einem guten Bekannten (Programmierer) einen Source code bekommen.
        Das ganze funktioniert auf dem Server Client Prinzip.
        Ich hab das den Code nun ca 5 Jahre und bin immer noch am überlegen wie der das hinbekommen hat, bzw warum das Teil das macht was es macht. Ich checks einfach nicht.
        Übertragen wird der komplette Arbeitsplatz, mit allen Partitionen und Laufwerken, nur ich weiuss nicht warum.
        Den Up-Download hab ich mal rausgenommen, der sicherheit wegen ^^
        
        ------------------------------------------------
        Client:
        ------------------------------------------------
        Option Explicit
        
        Private Sub Command1_Click()
        If Winsock1.State sckClosed Then 'Falls Verbindung besteht (Irre klicken ja mehrmals auf Listen-Button)
        Winsock1.Close 'dann schliessen vor dem...
        End If
        Winsock1.LocalPort = Val(Text1.Text) '...neuem festsetzen des Port auf text1 (val, da localport eine Zahl erwartet)
        Winsock1.Listen ' und warten auf Action :)
        End Sub
        
        Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) 'Verbindungsanfrage vom Server
        If Winsock1.State sckClosed Then 'Falls schon eine Verbindung besteht
        Winsock1.Close '... vorher schliessen
        End If
        Winsock1.Accept requestID 'Verbindung zum Server akzeptieren und aufbauen
        Command1.Enabled = False 'Button ausschalten, nun überflüssig
        End Sub
        
        Private Sub Command3_Click()
        Winsock1.SendData "+#VU" 'Verzeichnis höher gehen (Befehl senden)
        End Sub
        
        Private Sub List1_Click()
        Winsock1.SendData "+#DV" & List1.List(List1.ListIndex) 'Laufwerk wechseln (Befehl senden)
        End Sub
        
        Private Sub List2_Click()
        Winsock1.SendData "+#VL" & List2.List(List2.ListIndex) 'Verzeichnis wechseln (Befehl senden)
        End Sub
        
        Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
        Dim data As String
        Dim befehl As String
        Dim s As String
        Dim t As Long
        
        Winsock1.GetData data 'Daten holen
        
        While Len(data) 'Solange Daten in Data sind alles wiederholen zwischen While...Wend
        
        befehl = Left(data, 4) 'ersten 4 Zeichen sind immer Befehl
        data = Mid(data, 5) ' ersten 4 Zeichen löschen aus data, diese liegen ja in befehl nun
        
        If befehl = "+#CL" Then 'Listboxen leeren-Befehl?
        List1.Clear: List2.Clear: List3.Clear
        Else 'alle anderen Befehle
        
        t = InStr(data, "+#") 'ist in data noch ein Befehl vorhanden? (Befehle fangen mit +# an)
        'Instr liefert 0, wenn kein weiterer Befehl da ist
        
        If t Then 'ja, weitere Befehle
        s = Left(data, t - 1) 's enthält den Text bis zum nächsten Befehl in data
        data = Mid(data, Len(s) + 1) 'daher nun data löschen bis zum nächsten Befehl
        Else ' nein, kein Befehl mehr in data
        s = data 'also ist s der Rest von data
        data = "" 'Data löschen, sonst läuft while...wend ja ohne Ende
        End If
        
        'in s ist ja nun der Text...
        Select Case befehl '...und diesen nun je nach Befehl zuordnen
        Case "+#DR"
        List1.AddItem s 'Laufwerksliste
        Case "+#DI"
        List2.AddItem s 'Verzeichnisliste
        Case "+#FI"
        List3.AddItem s 'Dateiliste
        Case "+#VU"
        Label1.Caption = s 'aktuellen Pfad anzeigen
        End Select
        End If
        
        Wend
        End Sub
        
        ---------------------------------------------------------------
        Server:
        ---------------------------------------------------------------
        
        Option Explicit
        
        Private Sub Form_Load()
        'Boxen ausschalten, wird ja vom Client gesteuert
        Dir1.Enabled = False: Drive1.Enabled = False: File1.Enabled = False
        End Sub
        
        Private Sub Form_Unload(Cancel As Integer)
        Winsock1.Close 'Winsock schliessen bei Programmende
        End Sub
        
        Private Sub Command1_Click()
        Winsock1.Connect Text1.Text, Val(Text2.Text) 'Verbindung aufbauen zu IP text1 über Port text2
        End Sub
        
        Private Sub Winsock1_Connect() 'Verbindung zu Client wurde aufgebaut
        Command1.Enabled = False 'also Button deaktivieren
        Senden ' und aktuelle Laufwerke + Pfad senden
        End Sub
        
        Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
        Dim data As String
        
        Winsock1.GetData data 'Daten holen
        Select Case Left(data, 4) ' Befehl, also ersten 4 Zeichen von Data
        
        Case "+#DV" 'Laufwerk gewechselt
        Drive1.Drive = Mid(data, 5) 'Data, ab 5. Stelle ist das Laufwerk
        Dir1.Path = Drive1.Drive 'Pfad auf Laufwerk setzen
        File1.Path = Dir1.Path 'Dateien auf Pfad setzen
        Senden 'und weg mit dem ganzen Mist
        
        Case "+#VU" 'Verzeichnis höher gehen
        Dir1.Path = Left(Dir1.Path, InStrRev(Dir1.Path, "\")) 'letztes Verzeichnis vom Pfad löschen
        File1.Path = Dir1.Path ' Dateien auf Pfad setzen
        Senden '... rate mal... klar, den Käse wieder senden
        
        Case "+#VL" 'Verzeichnis geändert
        Dir1.Path = Mid(data, 5) 'Data ab 5. Stelle enthält neues Verzeichnis (ersten 4 Stellen war ja der Befehl)
        File1.Path = Dir1.Path 'Dateien natürlich auch wieder holen
        Senden '.... *no-comment*
        
        End Select
        End Sub
        
        Private Sub Senden()
        Dim i As Long
        Winsock1.SendData "+#CL" 'Befehl senden zum leeren der Listboxen auf dem Client
        For i = 0 To Drive1.ListCount - 1 'Alle Laufwerke senden
        Winsock1.SendData "+#DR" & Drive1.List(i)
        Next i
        For i = 0 To Dir1.ListCount - 1 'Alle Verzeichnisse senden
        Winsock1.SendData "+#DI" & Dir1.List(i)
        Next i
        For i = 0 To File1.ListCount - 1 'Alle angezeigten Dateien senden
        Winsock1.SendData "+#FI" & File1.List(i)
        Next i
        Winsock1.SendData "+#VU" & File1.Path 'Aktuellen Pfad senden (Label1-Anzeige auf Client)
        End Sub
        
        Downoad der Source:
        http://biernot.silentz-productions.de/nickles/Remote_Laufwerke_01.rar
        
        Warum macht das Program mit diesen ganzen +vd +hd +35453 usw, das was es macht?
        
        Das Client/Server Prinzip hab ich schon verstanden, nur diese eine Source nicht!
        
        Danke
      
Programmieren - alles kontrollieren 4.937 Themen, 20.662 Beiträge
          Hi!
          
          Ich programmiere zwar nicht in .Net oder VisualBasic, aber das Prinzip, das dein Freund da nutzt ist eigentlich recht simpel. Er lässt ein Programm auf dem Server laufen und eines auf dem Client.
          
          Der Weg, wie die Kommunizieren ist in der Theorie egal (die Sprechen offenbar über einen Port, der es ermöglicht einen String auszutauschen).
          
          Das Programm auf dem Server wartet nun offenbar, bis der Client ein Befehl übermittelt (über diese Stringsenden Kommunikationsmöglichkeit). Dieser String beinhaltet ein Kommande Datenzu senden oder das Verzeichnis zu wechseln.
          Das Serverprogramm wertet den Befehl aus, führt die passende Operation aus (z.B. Verzeichniswechsel) und sendet die benötigten Daten zurück.
          
          Damit der Server wies, was der Client will, hat dein Freund einfach ein paar Befehle erfunden, z.B. +#DV, +#VU und +#VL
          
          Wenn man nun im Client Program den Button "Eine Verzeichnis Ebene höher" klickt, dann sendet der Client den String "+#VU".
          
          Der Server sitzt ja nun da und wartet, dass ein Kommandostring rein kommt. Er prüft nun die ersten vier Buchstaben. Findete r dort die Zeichenkette "+#VU", dann wechselt er in das Verzeichnis und sendet als Ergebnis den neuen Pfad an den Cient (wieder als String). Dabei benutzt er als Sendekennung wieder den String "+#VU".
          
          Auf dem Client läuft ebenfalls ein Task, der auf solche Nachrichtenstrings vom Server wartet. Der Client wertet die Antwort aus und zeugt dann den neuen Pfad an.
          
          Das ist eine schöne einfache Lösung zur Kommunikation zwischen zwei Programmen (und zum Datenaustausch).
          
          Bis dann
          Andreas
        
