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 klicktleider 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 kannaber 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) angezeigtdaher 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öchteLG Flo
-
habs hinbekommen
hab einfach den block thread rausgeschmissen und neu als thread erstellt
diesmal aber nich die block.exe sondern nur den befehl, alsoBOOL ret = BlockInput( TRUE );
jezt funzts einwandfrei