ESC Beenden-Funktion - Belegeung m. Funktionen von F-Tasten
-
Hallo,
ich bin ein C-Newbie und frage mich wie man so etwas programmiert:
Ich habe schonmal im Forum/Google gesucht aber bin nicht fündig geworden.
Ich möchte in meinem C-Programm eine Art "Beenden-Taste" einbauen:
Drückt man die Taste "ESC" egal wo man im Programm ist, wird das Programm beendet ohne eine beliebige Taste drücken zu müssen.
Was ich auch noch wissen möchte, wie rufe ich mit den F-Tasten Code auf in Form eines Unterprogramms/Prototyp?
Gruß
dietzelmann
-
Garnicht. C hat keine Ahnung von
ESC
oder irgendwelchen komischenF...
-Tasten.
-
Mit Standard-C Mitteln geht das gar nicht. Der kennt nur Ein- und Ausgabestroeme, keine Tasten o.ae.
Welches OS verwendet du?
Im Falle von Windows kannst du GetAsyncKeyState verwenden, wenn du regelmaessig z.B. in einer Schleife die Tastatur abfragen moechtest.
-
Ja ich verwende Windows.
C erkennt doch Tasten an den "ASCII" oder bin ich da falsch informiert?
Kann man diese ASCII nicht auslesen und dann eine bestimmte Aktion durchführen lassen?
Wie schaut dann die Syntax bei "GetAsyncKeyState" aus?
Muss ich spezielle Libs einbinden?Als Compiler verwende ich Dev C++
Und wie beende ich ein C-Programm ohne "Drücken sie eine beliebige Taste" - >0 ist mir bekannt, aber ich muss da trotzdem etwas drücken
-
Bzgl. ASCII-Zeichensatz: Ich meine mal gelesen zu haben, das unter DOS Funktionstasten einen speziellen Zeichencode gesendet haben, um mitzuteilen, dass es sich um eine Funktionstaste handelt und dann einen zweiten um die Funktionstaste zu identifizieren. Inwiefern das noch fuer Windows heute gilt weiss ich nicht.
Die Syntax von GetAsyncKeyState findest du in dem Link; es gibt aber noch andere Funktionen die deine Aufgabe ggf. besser erfuellen. Beschreib mal genauer was du vorhast.
Als "Lib" brauchst du das WinAPI; ob das von Dev-CPP unterstuetzt wird weiss ich nicht.
-
Ich habe ein "Programm" was system()-Befehle also Batch-Befehle ausführt:
Hier ein kleiner Auszug:
switch (sorte) { case 0: sorte == 0; goto Exit; case 1: sorte == 1; system("call C:\\temp\\seite1.pdf"); break; case 2: sorte == 2; system("call C:\\temp\\seite2.pdf"); break; case 3: sorte == 3; system("call C:\\temp\\seite3.pdf"); break; }
Das Druckt Etiketten, bzw. öffnet die PDFs der Etiketten, da es bei den Etiketten mehrere Unterkategorien gibt, wäre es schön, wenn man durch ESC das Programm beenden kann, egal wo man gerade im Programm ist.
Ich habe es so gelöst dass die Taste 0 bei den case-Abfragen system("pause"); ausführt. Ich hätte es aber gerne mit der ESC Taste und dass man nicht Enter drücken muss, dass Programm soll sich einfach durch 1 Tastendrück beenden lassen und nicht nur bei einer Eingabe...
-
Evtl. sind für dich
_kbhit()
und_getch()
praktischer.
-
Aber getch und kbhit müssten ja dann in Dauerschleifen laufen?
Ich finde die "GetAsyncKeyState" interessant, weis aber nicht wie ich sie Anwenden soll?
-
dietzelmann schrieb:
Und wie beende ich ein C-Programm ohne "Drücken sie eine beliebige Taste" - >0 ist mir bekannt, aber ich muss da trotzdem etwas drücken
In dem du am Ende das
system("PAUSE");
weglässt.Falls du das nicht hast, kann es eine Einstellung deiner IDE sein, damit du die Ausgaben des Programms noch sehen kannst.
-
dietzelmann schrieb:
Ich hätte es aber gerne mit der ESC Taste und dass man nicht Enter drücken muss, dass Programm soll sich einfach durch 1 Tastendrück beenden lassen
#include <stdio.h> #define ESC 27 int main() { int c; for(;;) { c = getch(); if(c == ESC) { printf("Du hast ESC gedrueckt\n", c); return 0; } printf("Du hast %c gedrueckt\n", c); } }
-
Vielen Dank Belli!
Aber wo schreibe ich dann meinen anderen Code hin?
Und wie baue ich F-Tasten ein?Ich möchte auch andere Variablen einlesen, ist dies noch möglich?
-
#include <stdio.h> #define ESC 27 void funkEins() { printf("ich mach irgendwas in funkEins\n"); } void funkZwei() { printf("ich mach irgendwas in funkZwei\n"); } void funkDrei() { int c; printf("hier kann ich wieder irgendwas eingeben\n"); for(;;) { c = getch(); if(c == ESC) { printf("Du hast ESC gedrueckt\n", c); return; } printf("Du hast %c gedrueckt\n", c); } } int main() { int c; for(;;) { c = getch(); switch(c) { case '1': funkEins(); break; case '2': funkZwei(); break; case '3': funkDrei(); break; case ESC: return; default: printf("unbekannte Funktion ausgewaehlt\n"); } } }
-
Vielen vielen Dank Belli!!!
Danke Danke Danke!
Genau danach habe ich gesucht!!!
-
Freut mich, gern geschehen!
-
Falls Du Dich mit C++ anfreunden könntest, könnte auch das hier was für Dich sein:
http://www.c-plusplus.net/forum/303169