Text an fremde Fenster senden (Problem: irgendwann kommt nur noch Datenmüll an)



  • Hi Leute,

    hab da ein kleines Prob. mit einer Funktion

    void __fastcall TForm1::TextSend(AnsiString fenster, AnsiString Text) 
    { 
      int x; 
      int key=' ',gross,altgr; 
    
      HWND window=FindWindow(0,fenster.c_str()); 
      SetForegroundWindow(window); 
    
      for(x=0;x<Text.Length();x++) 
      { 
        switch(Text.c_str()[x]) 
        { 
          case'a':{key='A';gross=0;altgr=0;break;} 
          case'b':{key='B';gross=0;altgr=0;break;} 
          case'c':{key='C';gross=0;altgr=0;break;} 
          case'd':{key='D';gross=0;altgr=0;break;} 
          case'e':{key='E';gross=0;altgr=0;break;} 
          case'f':{key='F';gross=0;altgr=0;break;} 
          case'g':{key='G';gross=0;altgr=0;break;} 
          case'h':{key='H';gross=0;altgr=0;break;} 
          case'i':{key='I';gross=0;altgr=0;break;} 
          case'j':{key='J';gross=0;altgr=0;break;} 
          case'k':{key='K';gross=0;altgr=0;break;} 
          case'l':{key='L';gross=0;altgr=0;break;} 
          case'm':{key='M';gross=0;altgr=0;break;} 
          case'n':{key='N';gross=0;altgr=0;break;} 
          case'o':{key='O';gross=0;altgr=0;break;} 
          case'p':{key='P';gross=0;altgr=0;break;} 
          case'q':{key='Q';gross=0;altgr=0;break;} 
          case'r':{key='R';gross=0;altgr=0;break;} 
          case's':{key='S';gross=0;altgr=0;break;} 
          case't':{key='T';gross=0;altgr=0;break;} 
          case'u':{key='U';gross=0;altgr=0;break;} 
          case'v':{key='V';gross=0;altgr=0;break;} 
          case'w':{key='W';gross=0;altgr=0;break;} 
          case'x':{key='X';gross=0;altgr=0;break;} 
          case'y':{key='Y';gross=0;altgr=0;break;} 
          case'z':{key='Z';gross=0;altgr=0;break;} 
    
          case'\n':{key=VK_RETURN;gross=0;altgr=0;break;} 
        } 
    
        if(altgr==1)keybd_event(VK_RMENU, 0, 0, NULL); 
        if(gross==1)keybd_event(VK_SHIFT, 0, 0, NULL); 
        keybd_event(key, 0, 0, NULL); 
        keybd_event(key, 0, KEYEVENTF_KEYUP, 0); 
        if(gross==1)keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); 
        if(altgr==1)keybd_event(VK_RMENU, 0, KEYEVENTF_KEYUP, 0); 
      } 
       if(0==Text.Length()) 
       { 
         keybd_event(' ', 0, 0, NULL); 
         keybd_event(' ', 0, KEYEVENTF_KEYUP, 0); 
       } 
    }
    

    die ich von Hellmaster1024_ aus folgendem Beitrag habe.

    http://www.c-plusplus.net/forum/viewtopic.php?t=8132&postdays=0&postorder=asc&highlight=keybdevent&start=0

    Was da passiert hab ich verstanden, denk ich. Habe dann dazu eine verschachtelte Schleife geschrieben

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      int b=0;
      int a=0;
    
          for(a;a<=26;a++)
              {
               stelle_1=klein[a];
               for(b;b<=26;b++)
                   {
                    stelle_2=klein[b];  
                    for(int z=1;z<=26;z++)
                        {
                         Text=stelle_1+stelle_2+klein[z]+"\n";
                         TextSend(Edit1->Text, Text);
                        }
                  }
               b=1;
              }
    
     //Rekursiv();
    }
    

    die auf drei Stellen die möglichen Kombinationen aller Buchstaben, der Funktion übergibt. Diese sendet dann wiederum alles an ein Editor Textdokument.
    Mein Problem ist jetzt was am Ende in der .txt steht:

    bkh
    bki
    bkj
    bkk
    bkl
    bkm
    bkn
    bko
    bkp
    bkq
    bkr
    bks
    bkt
    bku
    bbk
    bbk
    bbb
    blb
    bb
    bblbbt
    bl
    bbmb
    bmebbm
    bbmbbmbmbbm

    ab hier ist alles verstümmelt bis zzz 😡 . Hat jemand evtl einen Verdacht woran das liegen könnte?
    Hab mir schon gedacht das rekursiv zu lösen. Was haltet ihr davon?

    THX



  • Was ist "klein"? Schon mal mit dem Debugger durch deine Funktion gesteppt und geschaut was eigentlich genau passiert?

    -junix



  • klein scheint ein array zu sein in dem das alphabet gespeichert ist.
    aber wieso sind klein, stelle_1 und stelle_2 nicht lokal?
    brauchst du sie noch an anderer stelle?
    und ist es gut seine char-werte so zuzuweisen?



  • sorka schrieb:

    [...]scheint [...] zu sein [...] aber wieso [...]?

    Genau das ist der Punkt.

    -junix



  • in klein sind die Buchstaben abgelegt:

    AnsiString klein[27];
    
      klein[0]="";
      klein[1]="a";
      klein[2]="b";
      klein[3]="c";
      klein[4]="d";
      klein[5]="e";
      klein[6]="f";
      klein[7]="g";
      klein[8]="h";
      klein[9]="i";
      klein[10]="j";
      klein[11]="k";
      klein[12]="l";
      klein[13]="m";
      klein[14]="n";
      klein[15]="o";
      klein[16]="p";
      klein[17]="q";
      klein[18]="r";
      klein[19]="s";
      klein[20]="t";
      klein[21]="u";
      klein[22]="v";
      klein[23]="w";
      klein[24]="x";
      klein[25]="y";
      klein[26]="z";
    

    Könnte das auch lokal machen nur bring mir das ja keinen Vorteil, oder?
    Mit dem Debugger hab ich noch nicht gearbeitet, werd mich da aber mal dran setzen nur ist es ja seltsam das das Prog. erst so spät Fehler macht. Erst ab "bku" (immer anders) kommt nur noch Datenmüll an. Wär irgendwas mit den Schleifen müsste ja auch schon eher ein Fehler auftreten!



  • musst du das ganze an den editor übergeben???
    kannst du es nicht in eine memo schreiben, und dann speichern?

    also ungefähr so:

    AnsiString klein[27];
    
      klein[0]="";
      klein[1]="a";
      klein[2]="b";
      klein[3]="c";
      klein[4]="d";
      klein[5]="e";
      klein[6]="f";
      klein[7]="g";
      klein[8]="h";
      klein[9]="i";
      klein[10]="j";
      klein[11]="k";
      klein[12]="l";
      klein[13]="m";
      klein[14]="n";
      klein[15]="o";
      klein[16]="p";
      klein[17]="q";
      klein[18]="r";
      klein[19]="s";
      klein[20]="t";
      klein[21]="u";
      klein[22]="v";
      klein[23]="w";
      klein[24]="x";
      klein[25]="y";
      klein[26]="z";
    
      int b=0;
      int a=0;
    
      AnsiString stelle_1, stelle_2;
    
      for(a;a<=26;a++)
      {
         stelle_1=klein[a];
         for(b;b<=26;b++)
         {
           stelle_2=klein[b];
    
           for(int z=1;z<=26;z++)
           {
              Text=stelle_1+stelle_2+klein[z];
              Memo1->Lines->Add(Text);
           }
         }
         b=1;
      }
      Memo1->Lines->SaveToFile("C:\\bruteforce.txt"); // <-- davon gehe ich mal aus...
    


  • Hab jetzt mal einen Haltepunkt für die Variable "Text" gesetzt und die Schleife vorher (hab mich langsam hoch gearbeitet) ca. 5000 durchlaufen lassen ("Breakpoint poroperties"\"Passcount")

    Text=stelle_1+stelle_2+klein[z]+"\n";
    TextSend(Edit1->Text, Text);
    

    das interessante dabei ist das jetzt erst ab ca. "hxf" nur noch Müll ankommt. Wenn ich die Schleife nach dem anhalten noch 2000 mal weiter laufen lasse, dann macht das Prog. auch keine Fehler mehr.
    Hab mir jetzt gedacht das ich evtl soetwas wie eine delay() einbauen könnte, weil das Debuggen ja sicherlich auch den Ablauf des Programms verlangsamt. Was haltet ihr davon?



  • Klar könnte ich das auch an ein Memo übergeben nur wär es ja sinnlos weil ich ja auf ein anderes Prog zugreifen will oder meinst du das ich dann die Text Datei (in der alle Kombinationen stehen) zu laufzeit des Progs einlese und dann Zeile für Zeile die Strings übertrage? (dann wären evtl 2 der Schleifen überflüssig)



  • Warum so umstaendlich?

    geht das nicht so:

    .
      .
      .
      AnsiString TextKlein="xyz";
      for (TextKlein[1]=`a`;TextKlein[1]<=`z`;TextKlein[1]++)
        for (TextKlein[2]=`a`;TextKlein[2]<=`z`;TextKlein[2]++)
          for (TextKlein[3]=`a`;TextKlein[3]<=`z`;TextKlein[2]++)
            TextSend(Edit1->Text, TextKlein);
      .
      .
      .
    

    ???



  • Hab das Problem gelöst. Falls es jemand wissen will, es lag an der Geschwindigkeit des Programms. Hab jetzt einen break von einer Millisekunde eingebaut und alles läuft wie es soll 🙂

    Sleep(1);
    TextSend(Edit1->Text, Text);
    

    wollte mich noch bedanken für den Link zu dem Debugger Tutorial. Jetzt weiß ich entlich mal wie das geht 😉 so ein bischen jedenfalls.
    Kann es auch nicht verstehen das dieses Thema an den meisten Schulen nicht angesprochen wird obwohl er einem die Arbeit ziemlich erleichtern kann.

    THX


Anmelden zum Antworten