PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [VB.NET] Array Problem mit For-Each Schleife



Metropoler
07.08.2009, 14:23
Wichtig davor: der Array SteamBenutzerNamen ist global deklariert worden.

Hier werden zunächst einfach die Steamuser im Array gespeichert.



Private Sub GetSteamUser()
SteamUserDirectory = SteamDirectory & "\SteamApps"
Dim SteamVerzeichnisse As String() = Directory.GetDirectories(SteamUserDirectory)

Dim SteamBenutzerNamen(Directory.GetDirectories(SteamU serDirectory).Count) As String
Dim SteamUsername As String
Dim SteamUserAnzahl As Short = 0
For Each SteamUsername In SteamVerzeichnisse
If SteamUsername = SteamUserDirectory & "\SourceMods" Or SteamUsername = SteamUserDirectory & "\common" Or SteamUsername = SteamUserDirectory & "\media" Then
Else
SteamBenutzerNamen(SteamUserAnzahl) = SteamUsername
SteamBenutzerNamen(SteamUserAnzahl) = SteamBenutzerNamen(SteamUserAnzahl).Replace(SteamU serDirectory & "\", "")
'In SteamBenutzerNamenString werden nun alle User mit Komma abgetrennt gespeichert.
SteamBenutzerNamenString &= SteamBenutzerNamen(SteamUserAnzahl) & " , "
SteamUserAnzahl += 1
End If
Next
End Sub
Beschreibung:
SteamUserAnzahl wird gebraucht um die Position des Steamusers im Array zu bestimmen (also 1,2,...).
Mit if wird abgefragt, ob der Ordner common, media oder SourceMods heißt, wenn ja, dann passiert nichts, anderfalls wird der Steamuser in dem Array SteamBenutzerNamen an der Position SteamUserAnzahl abgespeichert.



Nun wird es aber schwieriger, denn ich will variabel alle Passwortcodes in der ClientRegistry.blob auslesen. Damit muss ich für jeden Steamuser in dem Array SteamBenutzerNamennach "Phrase" suchen.




Private Sub GetSteamPassword()
' // Wir ermitteln die 3 Registry keys des Benutzers die zum Decrypten des Steam Passworts Benötigt werden
WindowsProductID = Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductId", String.Empty)
MachineGuid = Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography", "MachineGuid", String.Empty)
ValveIO = Registry.GetValue("HKEY_CURRENT_USER\Software\Valve\Half-Life\Settings", "io", String.Empty)

SteamDecryptKey = WindowsProductID & MachineGuid & ValveIO

Dim gethash = New StreamReader(SteamDirectory & "\clientregistry.blob").ReadToEnd

'Der Durchlauf um das Wort Phrase zu suchen
Dim s As String
For Each s In SteamBenutzerNamen
Dim startsuche As Integer = 1
Dim start As Integer = gethash.ToString.IndexOf("Phrase", startsuche)

If start = startsuche Then
Exit Sub
Else
Dim suchanfang As Integer = start + 40
Dim suchende As Integer = suchanfang + 91
Dim completeHash As String = CStr(Nothing)

For k = suchanfang To suchende Step 1
completeHash = completeHash + gethash.ElementAt(k)
Next k

SteamKeyKey &= completeHash & " , "
MsgBox(SteamKeyKey)
'Reset aller Stats
'Der start muss weiter nach vorner verlagert werden.
startsuche = suchende
start = 0
suchanfang = 0
suchende = 0
completeHash = CStr(Nothing)
End If
Next
End Sub


Beschreibung:
Es wird zunächst der SteamDecryptKey zusammengestellt.
Und dann gehts los: Für jeden String s der in SteamBenutzerNamen ist soll eben diese For-Each-Schleife durchgelaufen werden.


Hier kommt jetzt ein Fehler:
Auf dem Next der For-Each Schleife kommt der Fehler: NullReferenceException wurde nicht behandelt.
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Ich frage mich nur, wo der Fehler zur verdammten f8ck!ng Hööle liegen soll. Ich habe alles probiert irgendwie nun das einzubauen aber es funzt NIE. Immer dieser Null Fehler.

Ich bitte um Hilfe via ICQ: 466288666
ggf. dann auch Teamviewer.

inmate
07.08.2009, 15:17
Ich weiss nicht genau was du meinst aber es wird nur das Passwort gespeichert , mit dem sich der letzte User eingeloggt hat.

Metropoler
07.08.2009, 19:15
Ah ok, dann brauch ich garnicht erst nach weiteren Codes zu suchen. Ich dank dir vielmals.