Actie voor elke lijn in een textbox

Status
Niet open voor verdere reacties.

maxuploader

Gebruiker
Lid geworden
18 sep 2008
Berichten
316
Ik schrijf een programma dat gebruikersnamen en wachtwoord kan testen op een website met een http authencation. Dit gaat goed als ik 1 gebruikersnaam en wachtwoord test. (TextBox1 = Gebruikersnamen TextBox2 = Wachtwoorden

Nu is het me all gelukt om voor elke username (each line) een string te maken (Eerste twee lines van de code hier onder) Maar nu moet het programma elke gebruikersnaam en wachtwoord testen totdat ie ze allemaal heeft gehad. Hoe doe ik dat?

Btw gebruikersnaam wordt hier ingevuld:
http.Login = GEBRUIKERSNAAM
http.Password = WACHTWOORD.

Code:
      Dim usrs As String() = TextBox1.Text.Split(New [Char]() {CChar(vbCrLf)})
            Dim pass As String() = TextBox2.Text.Split(New [Char]() {CChar(vbCrLf)})
        http.Login = TextBox1.Text
        http.Password = TextBox2.Text
        response = http.GetHead(TextBox3.Text)
        If (response Is Nothing) Then
            lb_Code.Text = response.StatusCode

        ElseIf response.StatusCode = 200 Then
            lb_Code.Text = response.StatusCode
            TextBox6.Text += Environment.NewLine + "Password Is working!"

        Else
            lb_Code.Text = response.StatusCode
        End If
        ProgressBar1.PerformStep()

btw probeer de code niet te testen ik gebruik een bepaalde reference.
 
Je kunt een For Each loop gebruiken om elke regel in de textbox langs te gaan en voor elke regel een actie laten uitvoeren:

Code:
        For Each line As String In TextBox1.Lines
            Dim strsplt() As String = line.Split(Chr(32))
            MessageBox.Show("Username: " & strsplt(0) & ControlChars.NewLine & _
                            "Password: " & strsplt(1))
        Next

Getest met de volgende tekst in de textbox:

username1 password1
username2 password2
username3 password3
username4 password4
username5 password5
username6 password6
username7 password7

Dit gaf netjes voor elke regel de username en het wachtwoord weer.
 
Code:
Dim usrs As String() = TextBox1.Text.Split(New [Char]() {CChar(vbCrLf)})
            Dim pass As String() = TextBox2.Text.Split(New [Char]() {CChar(vbCrLf)})
For each usr As String in usrs
        http.Login = TextBox1.Text
For each pas As String in pass
        http.Password = TextBox2.Text
        response = http.GetHead(TextBox3.Text)
        If (response Is Nothing) Then
            lb_Code.Text = response.StatusCode

        ElseIf response.StatusCode = 200 Then
            lb_Code.Text = response.StatusCode
            TextBox6.Text += Environment.NewLine + "Password Is working!"
        Else
            lb_Code.Text = response.StatusCode
        End If
        ProgressBar1.PerformStep()
Next
Next

Dat heb ik geprobeerd maar de output is dat ik alles wat er in die twee boxes stond krijg en niet op de goede manier. Heb ik iets fout gedaan?
 
Oh, je hebt de usernames en de password in aparte textboxen staan? Dus niet usernames en password in één textbox?
 
Ja usernames in TextBox1 en de passwords in TextBox2.
Alleen de username & password met een server reply van 200 komen in TextBox6
in het volgende formaat:

username:password

Maar mijn output is zo:

username
username
username
username:password
password
password
password
 
Hmm, dat wordt wel lastig. Het zal ongetwijfeld kunnen maar ik denk niet dat ik het voor elkaar krijg voor je.

Edit:

Voldoet deze manier ook?

Code:
        For Each un As String In tbUsernames.Lines

            For Each pw As String In tbPasswords.Lines

                MessageBox.Show("Username: " & un & ControlChars.NewLine & _
                                "Password: " & pw)
            Next
        Next

Wat tie hier doet is:

un1 pw1
un1 pw2
un1 pw3
un1 pw4
un1 pw5

un2 pw1
un2 pw2
un2 pw3
un2 pw4
un2 pw5

un3 pw1
un3 pw2
etc...

Op deze manier loop je ook door alle usernames en wachtwoorden.
 
Laatst bewerkt:
Helemaal Geweldig!! Het werkt nu precies zoals ik het hebben wou!
Nou alleen nog 1 probleempje.

Ik gebruik nu deze code om de resultaten aan mijn TextBox6 toe te voegen.
Code:
 TextBox6.Text += Environment.NewLine + un + ":" & pw

Nu wil ik die TextBox vervangen door een list box, dat is niet het moeilijkste maar als ik 6 username & passwords ingeef en ze dan test dan zie ik het resultaat pas als hij alles heeft getest. Ik zou graag willen dat ie elke keer als die er eentje heeft getest dat ie hem dan toevoegt aan de lijst.
 
Items toevoegen aan een listbox gaat zo:

NaamVanListBox.Items.Add(item tekst hier)

Simpeler kan haast niet. :)
 
Dat wist ik all maar als ik een test start dan freezed het programm totdat alles is getest.
Ik wil dat als hij een goede heeft gevonden hem gelijk toevoegt aan de list niet alles teglijk toevoegen als ie klaar is.. begrijp je?
 
Ah bedoel je dat.

Zet dit onder datgene dat het hele process in werking stelt:

Code:
        Dim CheckUnPwThread As New Threading.Thread(AddressOf CheckUnPw)
        CheckUnPwThread.Name = "CheckUnPw"
        CheckUnPwThread.Start()

Dan maak je een nieuwe sub en hieronder zet je het process dat al die usernames en passwords naloopt. Met andere woorden, datgene dat ervoor zorgt dat het programma lijkt vast te lopen:

Code:
  Private Sub CheckUnPw()

Let op: de naam van deze sub moet overeenkomen met de naam die je hebt opgegeven in de code hiervoven (AddressOf ... en CheckUnPwThread.Name).

Dat zou moeten werken.
 
Laatst bewerkt:
ok bedankt.

Nu het volgende probleem. Ik probeer in de thread de listview te updated:
ListView1.Items.Add(un, 0)
ListView1.Items.Add(pw, 1)
ListView1.Items.Add(response.StatusCode, 2)

Ik heb drie collums, nu krijg ik de volgende erroe tijdens het debuggen:
Cross-thread operation not valid: Control 'ListView1' accessed from a thread other than the thread it was created on.

Ik heb all wat gegoogled maar wat ik vond was alleen voor een TextBox of Label. Hoe maak ik een safe-call ?
 
CheckForIllegalCrossThreadCalls = False

Zet dat boven de regel
CheckUnPwThread.Start()
 
ok dat is nu gefixt. Nog klein dingetje, hij blijft de loop oneindig herhalen maar hij moet stoppen als hij alle gebruikersnamen en wachtwoorden heeft gehad.

Alvast bednakt.
 
Dat kan niet kloppen.
Die loop stopt zodra alle lines in de textboxen gedaan zijn.
Deed tie het eerst wel dan?
 
Ok ik weet waar het probleem zit.
De call moet een thread-safe call zijn. Die error word nu genegeert maar daardoor gaat dus alles door elkaar. Als ik de code weghaal die dat negeert krijg ik deze error:

Cross-thread operation not valid: Control 'ListView1' accessed from a thread other than the thread it was created on.
 
Tsja, ik ben bang dat ik verder geen hulp kan bieden.

Je kan ook proberen om een BackGroundWorker control te gebruiken. Deze zorgt er ook voor dat het programma door blijft draaien tijdens een langdurig proces. Misschien dat deze anders werkt dan dat Threading.Thread gebeuren.

Anders zou ik het niet meer weten.
 
ooh laat maar, is all opgelost. TechNet forum :P
Nog een probleem, mijn output is nog steeds:

un1 pw1
un1 pw2
un1 pw3
un1 pw4
un1 pw5

un2 pw1
un2 pw2
un2 pw3
un2 pw4
un2 pw5

un3 pw1
un3 pw2

Nog een idee om dit te fixen tot:
un1 pw1
un2 pw2
etc...
 
Ehm, die output was toch prima? Dat is wat ik kon opmaken uit jouw reactie:

Ik zei:
Voldoet deze manier ook?

Toen was jouw reactie:
Helemaal Geweldig!!

Dus ik ging er van uit dat die output goed was. Het moet zowiezo niks uitmaken, want alle wachtwoorden worden op alle usernames toegepast. Dan maakt de volgorde niet uit.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan