Hotkeys



  • Moin, bin neu hier im Forum und hab da ein kleines problem zur zeit mit c++.

    Ich hab ein Programm mit einer endlos schleife
    die nur beim drücken einer bestimmten taste unterbrochen werden sollen.

    also zb
    if (kbhit(F11)) {
    Anweisung
    }
    natürlich wäre das jetzt falsch ist auch nur um zu zeigen was genau ich brauche ^^

    Hab schon einiges ausprobiert mit Virtuel keys kbhit und vieles mehr.
    Aber irgendwie wills einfach nicht klappen.
    achja was ich vielleicht noch dazu sagen sollte...
    Das Programm setzt ein anderes fenster im fordergrund und das fenster bleibt auch im fordergrund.

    Hoffe ihr könnt mir helfen Danke im vorraus ^^



  • Das Programm setzt ein anderes fenster im fordergrund und das fenster bleibt auch im fordergrund.

    Also soweit ich weiß, kann nur ein Fenster im Vordergrund sein.

    Der Ansatz mit kbhit() ist nicht schlecht.

    #include <stdio.h>
    #include <conio.h>
    
    int main()
    { int t;
        while(1)
        {
            if(kbhit())
            {
                t = getch();
                if(t == 13) //Enter
                   break;
            }
        }
        return 0;
    }
    

    Wie du das mit der Taste F11 realisierst, weiß ich auch nicht. Denn die Zahl, die für F11 steht, setzt sich aus zwei Zahlen zusammen: 224 und 133.

    Vielleicht kann da ein erfahrenerer Programmierer helfen?



  • Danke für das beispiel,
    aber naja glaube das wird nicht klappen wie ich gehört hab.
    Weil das kleine programm das ich hab mit einem Spiel zu tun hat und das Spiel im vordergrund holt.
    Habe gehört das man da bestimmte sachen verwenden muss naja weiss ja nicht 😕



  • habs getestet, klappt leider nicht 😕



  • Versuchs mal damit:

    bool bDone = false;
    char szKey = 0;
    
    do {
    
    	if( kbhit( ) ) { // Taste gedrueckt ???
    
    		szKey = getch( ) // Welche Taste ???
    
    		if( szKey == /*Taste*/ ) // Es Ist die Taste !!!
    			bDone = true;
    	}
    
    } while( !bDone )
    
    // ***** weiter gehts *****
    

    Gruß Tobi.



  • thx werds später testen 🙂



  • T0bi schrieb:

    Versuchs mal damit:

    bool bDone = false;
    char szKey = 0;
    
    do {
    
    	if( kbhit( ) ) { // Taste gedrueckt ???
    
    		szKey = getch( ) // Welche Taste ???
    		
    		if( szKey == /*Taste*/ ) // Es Ist die Taste !!!
    			bDone = true;
    	}
    
    } while( !bDone )
    
    // ***** weiter gehts *****
    

    Gruß Tobi.

    klappt leider nicht 😕



  • So sollte es funktionieren:

    #include <conio.h>
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	bool loop = true;
    	int key;
    
    	while (loop) {
    		if (_kbhit()) {
    			if ( (key = _getch()) == 224 &&
    				 (key = _getch()) == 133 ) {
    
    				 cout << "F11 Taste gedrueckt";
    				 cin.sync();
    				 cin.get();
    				 loop = false;
    			}
    			else
    				cout << "Andere Taste gedrueckt" << endl;
    		}
    	}
    
    return 0;
    }
    

    Um die zusammengesetzten Codes für die Spezialtasten auszulesen, kannst du folgende kleine Schleife verwenden.

    int key;
    
    	while (true) {
    		key = _getch();
    		cout << key << endl;
    	}
    

    Ich hoffe der Code hilft dir.


Anmelden zum Antworten