Also ich steige hier mal als Laie ein auch wenn nach erfahrenen Programmierern gefragt wurde:
Meiner Meinung nach ist das wichtigste beim Programmieren lernen sich nicht einfach Codeschnipsel zu ergoogeln und dann die Füße hochzulegen - das funktioniert halt nur für die kleinsten mini Tools u.ä...
Wichtig ist, in diesem Anfangsstadium den Code wirklich noch selber aufzuarbeiten und zu verstehen, was dieser Code bewirkt - dann ergeben sich drauß auch automatisch Abwandelungen die neue Wege eröffnen.
Dann wirst du deinen Code schreiben und wenn du damit fertig bist, wirst du für deine 100 Zeilen Code einen 5 Zeilen Code Block im Netz finden und graue Haare bekommen, aber bedenke, dass du 100 Zeilen Code dadurch geübt hast und mehr:
Übersicht über den Code behalten, klassische Fehler machen+finden+ausmerzen, ein Glücksgefühl haben wenn deine 100 Zeilen Code trotzdem funktioniert haben.
Ich gebe dir ein Beispiel das ich erst vor ein paar Tagen selber hatte, es ging darum die MAC -Adresse des ausführenden PC´s auszulesen und zusätzlich in eine Textdatei an eine bestimmte Stelle einzufügen - letzteres war das geringste Problem, aber an die MAC zu kommen und diese nach meinen Bedürfnissen zur Hand zu haben sah dann so aus:
Ausgangscode
Code:
Dim Mac As NetworkInterface
For Each Mac In NetworkInterface.GetAllNetworkInterfaces()
With Mac
If .NetworkInterfaceType <> NetworkInterfaceType.Loopback AndAlso
.NetworkInterfaceType <> NetworkInterfaceType.Tunnel Then
Listbox1.items.add(.Name.ToString & .getphysicaladress.ToString)
Der Code geht, er zeigt jedoch alle Macs aller aktiven Netzwerkmodule an - also auch neben Lan die anderen üblichen Verdächtigen VPN, Wlan, usw. und ich brauchte nur die LAN Verbindung.
Also musste ich genauer differenzieren um nur die LAN MAC ausgegeben zu bekommen um sie dann in die Textdatei einzufügen.
Code:
Dim Mac As NetworkInterface
For Each Mac In NetworkInterface.GetAllNetworkInterfaces()
With Mac
If .NetworkInterfaceType <> NetworkInterfaceType.Loopback AndAlso
.NetworkInterfaceType <> NetworkInterfaceType.Tunnel Then
If .Name = "LAN" Then
Dim LAN = .GetPhysicalAddress.ToString
Dim txt = IO.File.ReadAllText("C:\XXXXXX\XXXXX.txt")
txt = txt.Replace("this_MAC", LAN)
IO.File.WriteAllText("C:\XXXXXX\XXXXX.txt", txt)
End If
End If
End With
Next
Die Mac Adresse durfte in der fertigen Textdatei nur Zahlen + Kleinbuchstaben enthalten, ergo "ToLower" hinzugefügt
Code:
Dim Mac As NetworkInterface
For Each Mac In NetworkInterface.GetAllNetworkInterfaces()
With Mac
If .NetworkInterfaceType <> NetworkInterfaceType.Loopback AndAlso
.NetworkInterfaceType <> NetworkInterfaceType.Tunnel Then
If .Name = "LAN" Then
Dim LAN = .GetPhysicalAddress.ToString.ToLower
Dim txt = IO.File.ReadAllText("C:\XXXXXX\XXXXX.txt")
txt = txt.Replace("this_MAC", LAN)
IO.File.WriteAllText("C:\XXXXXX\XXXXX.txt", txt)
End If
End If
End With
Next
Der Code tat was ich wollte - jetzt hätte man hier aufhören können, aber ich finde da liegt dann der Reiz, "kann ich das zuverlässig kürzen?"
Und dann fiel mir auf, dass die "DIM LAN" überflüssig war und ich den ".GetPhysicalAddress.ToString.ToLower" direkt in die "txt.replace" Funktion einbauen konnte, da ich ja bereits oben mit dem "If .Name = "LAN" " bereits eingegrenzt hatte:
Code:
Dim Mac As NetworkInterface
For Each Mac In NetworkInterface.GetAllNetworkInterfaces()
With Mac
If .NetworkInterfaceType <> NetworkInterfaceType.Loopback AndAlso
.NetworkInterfaceType <> NetworkInterfaceType.Tunnel Then
If .Name = "LAN" Then
Dim LAN = .GetPhysicalAddress.ToString.ToLower
Dim txt = IO.File.ReadAllText("C:\XXXXXX\XXXXX.txt")
txt = txt.Replace("this_MAC", .GetPhysicalAddress.ToString.ToLower)
IO.File.WriteAllText("C:\XXXXXX\XXXXX.txt", txt)
End If
End If
End With
Next
Und es wird garantiert dafür elegantere Lösungen geben, die ich entweder nicht kenne oder sie schlicht übersehen habe, aber so ist es nunmal - man entwickelt sich dadurch weiter.