C++ Taste(n) nicht gedrückt halten können
-
Guten Abend!
Ich programmiere auf Windows mit Visual Studio und habe folgendes Problem:
Wenn Taste Y gedrückt wird soll Code X ausgeführt werden, allerdings soll Taste Y nicht gedrückt gehalten
werden. Ich will also, dass Code X nur einmal ausgeführt wird und man dann noch einmal drücken muss.
Als Verdeutlichung des Problems hier ein Beispiel:while (1) { if (kbhit) { switch (_getch()) { case 'Y': //Code X break; } } }
Bisher habe ich es so gelöst allerdings wird Code X durchgehend ausgeführt, wenn ich Taste Y gedrückt halte.
Schon mal vielen Dank für eure Hilfe.
MfG Marc
-
Huhu,
unter Windows: versuchs mal mit
RegisterHotKey
. Falls es nicht klappt habe ich glaub noch alten Code irgendwo.Edit: Hier ist ein Beispiel (je nachdem was Du eigentlich erreichen willst, gibt es evtl. bessere Möglichkeiten):
#include <iostream> #include <windows.h> int main() { constexpr int VK_Y{ 0x59 }; if (!RegisterHotKey(NULL, 0, 0, VK_Y)) { std::cerr << "RegisterHotKey failed!\n"; return EXIT_FAILURE; } for (MSG msg; GetMessage(&msg, NULL, 0, 0) > 0; ) { TranslateMessage(&msg); DispatchMessage(&msg); if (msg.message == WM_HOTKEY) { MessageBox(NULL, "Hotkey", "Press", 0); } } }
-
@Marc1235 merk dir einfach die Taste die gedrückt war und vergleiche aktuelle Taste mit der vom letzten mal.
Evtl. musst du da auch „keine Taste“ drin merken.
-
wie wäre es mit
int ypressed = 0; while (1) { if (kbhit) { switch (_getch()) { case 'Y': if(ypressed == 0) { ypressed = 1; //Code X } break; } } else { if(ypressed == 1) { ypressed = 0; } } }
-
oder mit:
while (1) { if (kbhit) { switch (_getch()) { case 'Y': //Code X while(kbhit){_getch();} //warten, bis keine Taste mehr gedrückt ist break; } } }
-
@Marc1235 sagte in C++ Taste(n) nicht gedrückt halten können:
if (kbhit)
Ich nehme an da steht
kbhit()
. Muss das non-blocking sein?
-
@Swordfish
Sorry hab den Code aus dem Gedächtnis geschrieben. Bei mir steht da: " _kbhit()".
Die Frage versteh ich nicht ganz, wenn du meinst, dass die Schleife weiterlaufen soll, dann ja.
-
@Marc1235 sagte in C++ Taste(n) nicht gedrückt halten können:
Die Frage versteh ich nicht ganz, wenn du meinst, dass die Schleife weiterlaufen soll, dann ja.
Mit non-blocking meine ich daß wenn keine Taste gedrückt wurde nicht gewartet wird bis eine Taste gedrückt wurde, ja.
-
@Swordfish
Es soll nicht gewartet werden.
-
@Swordfish sagte in C++ Taste(n) nicht gedrückt halten können:
ja.
schrieb ich doch. Dazu hast Du ja jetzt einige Möglichkeiten gezeigt bekommen.
-
@Swordfish
Warum postest du denn etwas, wenn du nicht vorhast eine Lösungsmöglichkeit beizutragen?
-
@Marc1235 Weil ich eine Frage hatte?
@Swordfish sagte in C++ Taste(n) nicht gedrückt halten können:
Muss das non-blocking sein?
Aber kein Problem. Ich werde in Deinen Threads nicht mehr posten wenn ich nichts beizutragen habe
-
@Swordfish
In wie fern hilft mir deine Frage denn weiter?
-
@Marc1235 Es war eine Verständnisfrage damit ICH (und andere) weiß was Du willst.