Tasten simulieren
-
Such mal in der Konsolen-FAQ nach kbhit() das hilft dir weiter
-
Nur bedingt in diesem Fall AJ, natürlich gehts, aber in dieser Zeit musst du kbhit() andauernd abfragen, gibt ne nette Systemauslastung :).
MfG SideWinder
-
.... und wie kann ichs besser machen
e:
das kbhit() prüft doch nur ob eine Taste gedrückt worden ist ?
Ich wollte es eigentlich so machen, das das Programm einen "virtuellen" Tastendruck sendet.
Nicht überprüfen ob eine Taste gedrückt ist sondern wenn man mit 'j' fortfahren soll, diesen Tastendruck zu simulieren.
-
Ja schon klar, aber du musst ja irgendwie abprüfen ob er bereits eine Taste gedrückt hat oder nicht -> kbhit(). Wenn du keine gedrückt hast willst du den Tastendruck simulieren oder wie?
Dann nimm lieber gleich nur kbhit()?
MfG SideWinder
-
Genau, ich will den Tastendruck simulieren.
Das mit kbhit() kannte ich schon vorher nur wollte ja was dazulernen
Will dieses 'j' simulieren.
Bin ich mit dem auf dem richtigen Weg ?keybd_event(0x6A, 0, 0, 0); keybd_event(0x6A, 0, KEYEVENTF_KEYUP, 0);
Soviel weis ich : 0x6A ist der Wert von 'j' in Hx
Das 1. Ereignis "drückt" die Taste, das 2. "lässt" es wieder los.
sofern man das gebrauchen kann, kann mir wer das genauer erklären?e: hab garnicht gesehn das keybd_event(); schon da war :xmas2:
trotzdem brauchbar ?
-
Ja
MfG SideWinder
-
Irgendwie funktioniert das bei mir nicht, oder hab ich was vergessen:
int main(int argc, char *argv[]) { char abfrage; cout<<" j drücken"; abfrage=getch(); keybd_event(0x6A, 0, 0, 0); keybd_event(0x6A, 0, KEYEVENTF_KEYUP, 0); if(abfrage=='j') { cout<<"\nSie haben j gedrückt"; } system("PAUSE"); return 0; }
Wollts nurmal testen, normalerweise müsste er doch automatisch in den if Zweig springen? tut er aber nicht
-
Wieso machst du nicht ne while schleife mit kbhit()...
... int frames = 0; while(kbhit()) { frames++; if(frames > 300) break; } ...
So ungefähr, natürlich musst du die Frames anpassen...
-
T0mmy, das Problem ist, dass er aus dem getch() erst wieder rauskommt, wenn eine Taste gerückt wurde, und wenn eine gedrückt wurde dann erst schickt er dein j an die Konsole. Da ist aber in abfrage noch der vorherige Wert. Das geht eben so nicht.
Du musst eine Funktion finden die rausfindet ob eine Taste gedrückt worden ist, wenn dies nach 10 Sekunden nicht eingetroffen ist, kannst du ein Input-Event senden, zB 'j' und danach erst mit getch() die jeweilige Taste bzw. eben dein gesendetes Event auslesen.
Da du aber an dein eigenes Programm sendest kannst du dir das Auslösen eines Input-Events in den meisten Fällen getrost sparen und nach 10 Sekunden sofort weitermachen als wäre ein 'j' gedrückt.
Hoffe das kam jetzt klar rüber :).
MfG SideWinder
-
SideWinder schrieb:
Nur bedingt in diesem Fall AJ, natürlich gehts, aber in dieser Zeit musst du kbhit() andauernd abfragen, gibt ne nette Systemauslastung :).
MfG SideWinder
Dafür gabs doch eine API-Funktion, oder?
*nachdenk*
-
Ich will aber nicht x ms warten bis die Eingabe wieder da ist - ja man merkt es kaum :p
MfG SideWinder
-
Du kannst dich auch nicht entscheiden. Entweder willst du eine geringe Systemauslastung oder eine millisekundenschnelle Eingabemöglichkeit *tztztz*
:p
-
Deswegen hat die Tastatur absofort das Recht das OS zu unterbrechen ;).
MfG SideWinder
-
Und ich dachte du magst keine Interrupts
-
Doch, bloß kenne ich mich nicht so gut mit ihnen aus ;).
MfG SideWinder
-
Na dann mach dich mal ran, damit du das OS unterbrechen kannst mit einer Tastatureingabe