Thread beendet nicht (Bitte helft mir!!!)



  • hab da folgende programmschnipsel:

    int cxScreen,cyScreen,x,y;
    
                      //ThreadTwo
                      hThread[0] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadTwo,NULL,0,&dwID[0]);
    
                      cxScreen = GetSystemMetrics(SM_CXSCREEN);
                      cyScreen = GetSystemMetrics(SM_CYSCREEN);
    
                      //ThreadFive
                        hThread[3] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFive,NULL,0,&dwID[3]);
    
                      if(cxScreen == 1440 && cyScreen == 900)
                      {
                        y=0;                   // Maus bewegt sich auf "Ja" Schaltfläche
                        x=0;
                        for(;y != 504; x++, y++ )
                        {
                        SetCursorPos(x, y);
                        Sleep(4);
                        }
                        for(;x != 830; x++)
                        {
                        SetCursorPos(x, y);
                        Sleep(4);
                        }
    
                      }
    
                      if(cxScreen == 1360 && cyScreen == 1024)
                      {
                        y=0;                   // Maus bewegt sich auf "Ja" Schaltfläche
                        x=0;
                        for(;y != 573; x++, y++ )
                        {
                        SetCursorPos(x, y);
                        Sleep(4);
                        }
                        for(;x != 782; x++)
                        {
                        SetCursorPos(x, y);
                        Sleep(4);
                        }
    
                      }
    
                      if(cxScreen != 800 && cyScreen != 600 || cxScreen == 1024 && cyScreen == 768)
                      {
                        Sleep(3000);
                        GetExitCodeThread(hThread[0],&lpExitCode);
                        TerminateThread(hThread[0],lpExitCode);
                      }
    
                        //ThreadFour
                        hThread[2] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFour,NULL,0,&dwID[2]);
    
                        GetExitCodeThread(hThread[3],&lpExitCode);
                        TerminateThread(hThread[3],lpExitCode);
    
                         Sleep(3000);
                         mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                         Sleep(3000);
                         mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
    
                        GetExitCodeThread(hThread[2],&lpExitCode);
                        TerminateThread(hThread[2],lpExitCode);
    
                    Sleep(4000);
    

    bitte nicht lachen, aber ich kanns noch nich besser 😃

    nun zum Problem
    ich möchte eigentlich dass sich die maus auf den ok button der msg box bewegt und dann auf ok klickt

    leider braucht die abfrage der bildschirmauflösung zusammen mit den ganzen (sehr vielen :/) if teilen (nicht alle im code hier) ziemlich lange daher kann ich den cursor nich einfach mit SetCursorPos auf der "Ok" Schaltfläche festhalten

    daher hab ich mir gedacht dass ich einfach alle eingaben blocke bis er an der Stelle ist wo der cursor dann festgehalten wird
    das hab ich mit einer BlockInput schleife gemacht (threadfive) die beendet werden sollte wenn SetCursorPos wieder eingesetzt werden kann

    aber irgendwas is schiefgelaufen

    das programm klickt nicht auf "Ok" sondern block weiter alle eingaben
    im taskmanager werden 3 instanzen von block.exe (dem block input befehl) angezeigt

    daher meine ich muss beim beenden des threads was daneben gegangen sein

    hat da jemand zufälligerweiße ne idee?

    LG Flo 🙂



  • 1. Falsches Forum
    2. 656 Zeilen Code posten und fragen was falsch ist wird kaum zum Erfolg führen. Lösche alles aus deinem Code was den Fehler nicht entfernt und präsentiere uns 10 Zeilen, dann kuckt sich das vielleicht jemand an.
    3. Benutze einen Debugger oder printf um herauszufinden wie weit dein Programm kommt und wo genau es stecken bleibt. Zur Not, wenn dir nichts besseres einfällt, schreibe in jede Zeile printf("Programm ist gerade in Zeile %d\n", __LINE__);
    Dein "Konsole verstecken" kannst du ja mal eben auskommentieren. Dann siehst du sofort in welcher Zeile es nicht mehr weiter geht.
    4. Sieh dir bitte mal switch und case an.
    5. Gewöhne dir an sinnvolle Variablennamen zu benutzen. Zum Beispiel anstatt "Remember, ThreadOne is our main thread" als Kommentar zu schreiben nenne ThreadOne einfach mainThread.
    6. Sleep hat eine Präzision von ungefähr 16ms. Sleep(4) wird also nicht wie erwartet 4ms schlafen.
    7. Schau dir AutoIt an. Das ist ein kleines Script-Tool was ganz einfach Nachrichtenboxen bauen, Mausklicks und Tasten senden, Fenster verstecken/in den Vordergrund holen kann usw.



  • nwp2 schrieb:

    1. Falsches Forum
    2. 656 Zeilen Code posten und fragen was falsch ist wird kaum zum Erfolg führen. Lösche alles aus deinem Code was den Fehler nicht entfernt und präsentiere uns 10 Zeilen, dann kuckt sich das vielleicht jemand an.
    3. Benutze einen Debugger oder printf um herauszufinden wie weit dein Programm kommt und wo genau es stecken bleibt. Zur Not, wenn dir nichts besseres einfällt, schreibe in jede Zeile printf("Programm ist gerade in Zeile %d\n", __LINE__);
    Dein "Konsole verstecken" kannst du ja mal eben auskommentieren. Dann siehst du sofort in welcher Zeile es nicht mehr weiter geht.
    4. Sieh dir bitte mal switch und case an.
    5. Gewöhne dir an sinnvolle Variablennamen zu benutzen. Zum Beispiel anstatt "Remember, ThreadOne is our main thread" als Kommentar zu schreiben nenne ThreadOne einfach mainThread.
    6. Sleep hat eine Präzision von ungefähr 16ms. Sleep(4) wird also nicht wie erwartet 4ms schlafen.
    7. Schau dir AutoIt an. Das ist ein kleines Script-Tool was ganz einfach Nachrichtenboxen bauen, Mausklicks und Tasten senden, Fenster verstecken/in den Vordergrund holen kann usw.

    danke für deine tipps, fang gleich damit an... 🙂
    des mit dem sleep is mir egal, da ich bloß eine einigermaßen flüssige und gleichmäßige cursorbewegung haben möchte

    LG Flo 🙂



  • habs hinbekommen
    hab einfach den block thread rausgeschmissen und neu als thread erstellt
    diesmal aber nich die block.exe sondern nur den befehl, also

    BOOL ret = BlockInput( TRUE );

    jezt funzts einwandfrei 😃


Anmelden zum Antworten