Programm funktioniert nicht richtig.



  • schlafwissenschaftler schrieb:

    Sleep(1) reicht völlig aus.

    Sleep(0) ist besser. das gibt einfach nur die angefangene zeitscheibe sofort ab, ohne den thread für einen systemtick schlafen zu legen.
    🙂



  • fricky schrieb:

    schlafwissenschaftler schrieb:

    Sleep(1) reicht völlig aus.

    Sleep(0) ist besser. das gibt einfach nur die angefangene zeitscheibe sofort ab, ohne den thread für einen systemtick schlafen zu legen.
    🙂

    Noch besser ist, Sleep(-1). Dann werden die Mausklicks vorhergesagt.



  • Zukunftsvisionär schrieb:

    Noch besser ist, Sleep(-1). Dann werden die Mausklicks vorhergesagt.

    was aber egal ist, weil sämtliche mausklicks bei 'Sleep(-1)' das programm nicht interessieren werden.
    🙂



  • B.B. schrieb:

    Meinst du etwa, das im else Zweig kein Klick stattfinden kann ?
    Oh Frau.. 🙄

    spielt keine rolle, wo sich die mauss nacher befindet, er will nur die richtung "WÄHREND" des gedrückhalten wissen nich den weg o. positipon



  • schlafwissenschaftler schrieb:

    Sleep(1) reicht völlig aus.

    Womit wir wieder beim Polling-Problem wären.



  • Nagut, auf die Probleme bezüglich Polling und Sleep ist ja der OP hingewiesen worden. Sich für eine Variante zu entscheiden liegt bei ihm.

    Zum Problem selbst:
    Verzichte auf float, fabs und co.
    Die Bildschirmkoordinaten sind long Werte.
    Du brauchst eine zweite Variable vom Typ POINT, um die Koordinatendifferenzen bilden zu können:

    #include <stdio.h>
    #include <windows.h>
    
    #define PFUI_1 1
    #define PFUI_2 100
    
    int main()
    {
    	POINT now, before;
    	long dx, dy;
    
    	GetCursorPos( &before );
    
    	while ( PFUI_1 )
    	{
    		Sleep ( PFUI_2 );
    
    		while ( GetAsyncKeyState( VK_RBUTTON ) )
    		{  
    			GetCursorPos( &now );
    
    			dx = now.x - before.x;
    			dy = now.y - before.y;
    
    			if ( dy > 0 && dx > 0 )
    				printf( "3\r" );
    
    			if ( dy < 0 && dx > 0 )
    				printf( "9\r" );
    
    			if ( dy > 0 && dx < 0 )
    				printf( "1\r" );
    
    			if ( dy < 0 && dx < 0 )
    				printf( "7\r" );
    
    			if ( dx > 0 && dy == 0 )
    				printf ( "6\r" );
    
    			if ( dx < 0 && dy == 0 )
    				printf ( "4 \r" );
    
    			if ( dy > 0 && dx == 0 )
    				printf ( "2\r" );
    
    			if ( dy < 0 && dx == 0 )
    				printf ( "8\r" );
    
    		   before = now;
    		}
       	}
    	return 0;
    }
    

    🙂



  • Woar, herzlichen dank B.B.

    Ich habe es einbisschen verändert. Wenn man die Maus nach oben links so in das Gebiet lenkt, passiert nichts ( 4 - 7 - 8 ). Weiß wer warum?

    #include <stdio.h>
    #include <windows.h>
    
    #define WARTE 1000
    
    int main()
    {
        POINT now, before;
        long dx, dy;
    	long dif = 10;
    
        GetCursorPos( &before );
    
        while ( 1 )
        {
             Sleep ( WARTE );
    
            while ( GetAsyncKeyState( VK_RBUTTON ) )
            {  
                GetCursorPos( &now );
    
                dx = now.x - before.x;
                dy = now.y - before.y;
    			if(dx>dif || dy>dif) { 
    			    if ( dy > 0 && dx > 0 )  printf( "3" );
    				if ( dy < 0 && dx > 0 )	 printf( "9" );
    				if ( dy > 0 && dx < 0 )	 printf( "1" );
    				if ( dy < dif && dx < dif )	 printf( "7" );
    			    if ( dx > 0 && dy == 0 ) printf ( "6" );
    				if ( dx < 0 && dy == 0 ) printf ( "4" );
    				if ( dy > 0 && dx == 0 ) printf ( "2" );
    				if ( dy < 0 && dx == 0 ) printf ( "8" );
    
    			   before = now;
    			}
    
            }
    		printf("\n");
    			now.x = 0;
    			now.y = 0;
    			before.x = 0;
    			before.y = 0;
    			dx = 0;
    			dy = 0;
           }
        return 0;
    }
    


  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Vielleicht hat es mit dem treiber zu tun?



  • Keiner eine idee?


Anmelden zum Antworten