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