Abfrage Problem



  • Hi Zusammen ich habe ein schwer zu beschreibendes Problem

    Ich habe ein Programm dass beim Enterdrücken alle numpad zahlen auffängt und dann zb. 12.wmv abzuspielen und beim 2. Mal enterklicken soll es dann mit aufzeichnen Stoppen.

    Nun habe ich folgendes Problem:

    Wenn ich vor dem Enterdrücken zb. 7653 Eintippe und danach enter drücke und dann 12 Eintippe kommt dann aber leider 765312 heraus Wiso ?? Eingentlich sollten ja die 7653 nicht gezählt werden 😞

    Hoffe Jemand Kann mir Helfen 🙄

    main.cpp

    #include <windows.h>
    #include <iostream>
    #include <Mmsystem.h>
    
    using namespace std;
    
    int main()
    {
    	bool eingabe = false;
    	bool pressed = false;
    	bool pressedR = false;
    	string code;
    
    	while(true)
    	{
    		if(GetAsyncKeyState(VK_RETURN))
    		{
    			if(!pressedR)
    			{
    			   pressedR = true;
    			   if(!eingabe)
    			   {
    				   code = "";
    				   eingabe = true;
    			   }
    			   else
    			   {
    				   eingabe = false;
    				   code.append(".wav");
    				   cout << "Abspilen: " << code.c_str() << endl;
    				   PlaySound(code.c_str(),0,0);
    			   }
    			}
    		}
    		else
    		{
    			pressedR = false;
    		}
    		if(eingabe)
    		{
    			   if(GetAsyncKeyState(VK_NUMPAD1))
    			   {
    				  pressed = true;
    				  code.append("1");
    				  Sleep(300);
    			   }
    			   else if(GetAsyncKeyState(VK_NUMPAD2))
    			   {
    				   pressed = true;
    				   code.append("2");
    				   Sleep(300);
    			   }
    			   else if(GetAsyncKeyState(VK_NUMPAD3))
    			   {
    				   pressed = true;
    				   code.append("3");
    				   Sleep(300);
    			   }
    			   else if(GetAsyncKeyState(VK_NUMPAD4))
    			   {
    				   pressed = true;
    				   code.append("4");
    				   Sleep(300);
    			   }
    			   else if(GetAsyncKeyState(VK_NUMPAD5))
    			   {
    				   pressed = true;
    				   code.append("5");
    				   Sleep(300);
    			   }
    			   else if(GetAsyncKeyState(VK_NUMPAD6))
    			   {
    				   pressed = true;
    				   code.append("6");
    				   Sleep(300);
    			   }
    			   else if(GetAsyncKeyState(VK_NUMPAD7))
    			   {
    				   pressed = true;
    				   code.append("7");
    				   Sleep(300);
    			   }
    			   else if(GetAsyncKeyState(VK_NUMPAD8))
    			   {
    				   pressed = true;
    				   code.append("8");
    				   Sleep(300);
    			   }
    			   else if(GetAsyncKeyState(VK_NUMPAD9))
    			   {
    				   pressed = true;
    				   code.append("9");
    				   Sleep(300);
    			   }
    		}
    	}
    }
    


  • Hi,

    meine einzige idee wäre jetzt, das du statt:

    if(!eingabe)
                   {
                       code = "";
                       eingabe = true;
                   }
    

    mal folgendes probierst:

    if(!eingabe)
                   {
                       memset(&code,0,sizeof(code));
                       eingabe = true;
                   }
    

    memset soll zudem auch sicherer sein von wegen bufferoverflow usw.



  • Hi, danke dass du dir die Zeit genommen hast meinen Quellcode Anzuschauen, aber Funktionirt leider nicht 😞

    Kann das vieleicht an der Kosnsolenanwendung ligen ?



  • Ich hab mir deinen Code nicht angeguckt -.- ABER: Lass dir doch einfach mal deinen Buffer nach dem Enter ausgeben...



  • Hi, wie meinst du dass genau ??

    cout << "Abspilen: " << code.c_str() << endl;
    				   cout << sizeof(code.c_str());
    

    Der Buffer ist immer das selbe(4).

    Habe leider echt keinen Plan an was da ligen könnte 😞

    Hoffe echt das jamand die Lösung findet.



  • MSDN schrieb:

    This function determines whether a key is up or down at the time the function is called, and whether the key was pressed after a previous call to GetAsyncKeyState.

    Das Problem liegt bei GetAsyncKeyState. Ist echt viel zu komplizert das so zu machen, nehm lieber den normalen weg über die Messages.

    mfg.


Anmelden zum Antworten