GetAsyncKeyState und Funktionstasten



  • Mentras schrieb:

    Dann wird nämlich der ganze Ausdruck verneint.

    Und was ist deiner Meinung nach vorher passiert?

    EDIT: Also dieses Minimalbeispiel nach deinem Vorbild funktioniert tadellos:

    #include <Windows.h>
    #include <iostream>
    
    using namespace std;
    
    int main(void) { 
    	for(;;) {
    		if(GetAsyncKeyState(VK_F5)) 
    		{ 
    			cout << "F5 pressed" << endl;
    
    			while(!GetAsyncKeyState(VK_F5)) 
    			{
    				cout << "mehr Code..." << endl;
    				// noch mehr Code 
    			} 
    		}
    	}
    }
    

    Ich würde mal vermuten, dass du noch nicht mal in die erste if-Verzweigung kommst...



  • War wohl falsch,... nagut.

    Danke!

    Lg Mentras



  • Mein Minimalbeispiel sah sehr ähnlich aus:

    #include <windows.h>
    #include <iostream>
    
    int main()
    {
    	while(1)
    	{
    		if(GetAsyncKeyState(VK_F5) & 1)
    		{
    			while(!(GetAsyncKeyState(VK_F5) & 1))
    			{
    				std::cout << "       inner Loop\n";
    				Sleep(1000);
    			}
    		}
    		std::cout << "outer Loop\n";
    		//Sleep(1000);
    	}
    }
    

    Ich hatte allerdings das Problem, daß ohne den oben auskommentierten Sleep mein Programm auch die if-Abfrage nicht überwand. Mit aktiviertem Sleep funktionierte es einwandfrei.
    Erst nachdem ich den Test so wie oben (ver-and-en mit 1) geändert hatte, lief es auch so, wie es soll. 😕



  • Nach ein paar weiteren Tests glaube ich, daß das Programm einfach so schnell läuft, daß beim zweiten GetAsyncKeyState (in der while-Schleife) die Taste als immer noch gedrückt erkannt wird. Durch das ver-and-en mit 1 erreicht man, daß festgestellt wird, ob die Taste nach dem letzten GetAsyncKeyState - Aufruf erneut gedrückt wurde ---> das funktioniert.



  • Belli schrieb:

    Nach ein paar weiteren Tests glaube ich, daß das Programm einfach so schnell läuft, daß beim zweiten GetAsyncKeyState (in der while-Schleife) die Taste als immer noch gedrückt erkannt wird. Durch das ver-and-en mit 1 erreicht man, daß festgestellt wird, ob die Taste nach dem letzten GetAsyncKeyState - Aufruf erneut gedrückt wurde ---> das funktioniert.

    Genau, stimmt. Vielleicht sollte man einfach mal die Doku lesen. 🤡

    MS schrieb:

    Although the least significant bit of the return value indicates whether the key has been pressed since the last query [...]

    Bei mir hat es wohl nur geklappt, weil ich so unheimlich flinke Finger habe... 😉



  • _matze schrieb:

    Bei mir hat es wohl nur geklappt, weil ich so unheimlich flinke Finger habe... 😉

    Ich schätze, bei Dir hat es geklappt, weil Deine Ausgabe zwischen den beiden Aufrufen war ... 😉



  • Belli schrieb:

    _matze schrieb:

    Bei mir hat es wohl nur geklappt, weil ich so unheimlich flinke Finger habe... 😉

    Ich schätze, bei Dir hat es geklappt, weil Deine Ausgabe zwischen den beiden Aufrufen war ... 😉

    Hehe, oder so. Ich bevorzuge aber die Variante, in der ich einfach viel schneller als alle anderen bin. 😃



  • Alles klar..
    Nach 30 mal hinschaun hab ich bemerkt, dass ich GetAsyncKeyState('VK_F5') geschrieben hab.
    Mich wundert aber, dass ich bei den anderen Funktionen nie einen Sleep-Befehl gebraucht hab.
    Danke für die Antworten.



  • Tastendruecker schrieb:

    Alles klar..
    Nach 30 mal hinschaun hab ich bemerkt, dass ich GetAsyncKeyState('VK_F5') geschrieben hab.

    Hehe, deswegen ist es sehr sinnvoll, hier auch wirklich den Code zu posten, den man auszuführen versucht (Stichwort C&P)...



  • Tastendruecker schrieb:

    Mich wundert aber, dass ich bei den anderen Funktionen nie einen Sleep-Befehl gebraucht hab.

    Das hab ich doch geschrieben, wenn Du es richtig machst, brauchst Du kein Sleep!



  • Belli schrieb:

    Tastendruecker schrieb:

    Mich wundert aber, dass ich bei den anderen Funktionen nie einen Sleep-Befehl gebraucht hab.

    Das hab ich doch geschrieben, wenn Du es richtig machst, brauchst Du kein Sleep!

    Ich hab jetzt schon alles durch und es kommen jedesmal andere Variationen..



  • Tastendruecker schrieb:

    Ich hab jetzt schon alles durch und es kommen jedesmal andere Variationen..

    Dann machst du jedesmal was anders... :p


Anmelden zum Antworten