Hallo, habe hier ein kleines Problem bei meinem C Programm. Ich hoffe ihr könnt mir weiterhelfen. Folgendes: Das Programm soll im Hintergrund laufen und immer wieder die Systemzeit aktualisieren ( also die While Schleife durchlaufen ) bis der Benutzer im Spiel eine bestimmte Taste drückt. In dem Fall "DEL". Dann soll das Programm automatisch die Schleife fertig arbeiten und dann zur Eingabe mittels Scanf zurückkehren. Allerdings scheint das "while (getch() != '127')" nicht zu funktionieren.... Außerdem läuft er die While Schleife immer erst durch, sobald ich irgendeine Taste drück (Wäre besser wenn er sie kontiniuerlich durchlaufen würde, damit die Systemzeit schön aktualisiert wird.). Wundert euch bitte nicht über die Namen, sollte eben ein kleines Hilfsprogramm zu nem Spiel werden. mfg <code> #include <windows.h> #include <stdio.h> #include <time.h> void main (int argc, char *argv[]) { int a,rl,rr,bl,br,dr,ba,eingabe; time_t startzeit; printf("LoL Jungle Timer V1.0\n\n"); printf("Taste druecken - Sobald Spiel gestartet ist!!!!\n\n"); system("Pause"); startzeit=time(NULL); a=startzeit; rl=startzeit+115; rr=startzeit+115; bl=startzeit+115; br=startzeit+115; dr=startzeit+150; ba=startzeit+900; goto label1; while(1) { printf("Waehlen sie die Zahl:\n1. Roter Buff LINKS\n2. Roter Buff RECHTS\n3. Blauer Buff LINKS\n4. Blauer Buff RECHTS\n5. Drache\n6. Baron\n\n"); printf("Eingabe: "); scanf("%d",&eingabe); while (getch() != '127') { if (eingabe == 1) { startzeit=time(NULL); rl=startzeit+300; } else if(eingabe == 2) { startzeit=time(NULL); rr=startzeit+300; } else if(eingabe == 3) { startzeit=time(NULL); bl=startzeit+300; } else if(eingabe == 4) { startzeit=time(NULL); br=startzeit+300; } else if(eingabe == 5) { startzeit=time(NULL); dr=startzeit+360; } else if(eingabe == 6) { startzeit=time(NULL); ba=startzeit+420; } else { printf("Falsche Eingabe!"); } label1: startzeit=time(NULL); a=startzeit; system("CLS"); printf("Aktuelle Systemzeit: %s\n",ctime(&a)); printf("Spawnzeitpunkt Roter Buff Links: %s\n",ctime(&rl)); printf("Spawnzeitpunkt Roter Buff Rechts: %s\n",ctime(&rr)); printf("Spawnzeitpunkt Blauer Buff Links: %s\n",ctime(&bl)); printf("Spawnzeitpunkt Blauer Buff Rechts: %s\n",ctime(&br)); printf("Spawnzeitpunkt Drache: %s\n",ctime(&dr)); printf("Spawnzeitpunkt Baron: %s\n",ctime(&ba)); } } } </code>
Das habe ich auch schon gefunden. Allerdings bin ich bzgl. des Syntax etc. etwas verwirrt. Könntest du mir ein kleines Beispiel geben wie man die DEL Taste dabei überprüft? Muss ich dazu noch eine lib einbinden?
1 | esc=GetAsyncKeyState(VK_ESCAPE); |
Ich würde mal vermuten für DEL passt dann VK_DEL oder VK_DELETE... SHORT müsste 16bit sein, Header windows.h, Libs keine.
while (del=GetAsyncKeyState(VK_DEL) != 1); Er durchläuft sie solange bis del = 1 ist richtig? Dann bringt er mir die Meldung VK_DEL sei nicht deklariert. Ich deklariere es, dann hängt er sich nach der Eingabe beim Eintritt in die While Schleife auf. :(
VK_DELETE funktioniert besser, dann muss man die Variable schonmal nicht deklarieren. Trotzdem hängt er sich dabei auf. Entweder ich überseh grad n Fehler im Programm oder es klappt so nicht.
Autor schrieb: > while (del=GetAsyncKeyState(VK_DEL) != 1); > > Er durchläuft sie solange bis del = 1 ist richtig? Ich meine da fehlen Klammern (die Operatorenreihenfolge konnte ich mir noch nie merken). > > Dann bringt er mir die Meldung VK_DEL sei nicht deklariert. Och Mensch nochmal, guck doch mal in die winuser.h, dann wüsstest du das es VK_DELETE heißen muss.
1 | #define VK_DELETE 46
|
> Ich deklariere es, dann hängt er sich nach der Eingabe beim Eintritt in > die While Schleife auf. Mit welchem Wert denn? Ne, so wird das natürlich nichts. Ohne dir zu nahe treten zu wollen, besonders viel Programmiererfahrung hast du nicht oder? > VK_DELETE funktioniert besser, dann muss man die Variable schonmal nicht > deklarieren. UARGHS! Das ist keine Variable!!!
Wart mal fünf Minuten, ich bastel mal ein Beispielprogramm.
So, bitte sehr...
1 | #include <stdlib.h> |
2 | #include <stdio.h> |
3 | #include <stdint.h> |
4 | #include <windows.h> |
5 | |
6 | int main (int argc __attribute((__unused__)), char **argv __attribute((__unused__))) |
7 | {
|
8 | uint16_t del_pressed; |
9 | printf("Beenden mit DELETE!\n"); |
10 | while(!GetAsyncKeyState(VK_DELETE)) |
11 | {
|
12 | del_pressed=GetAsyncKeyState(VK_ESCAPE); |
13 | if(del_pressed) |
14 | printf("Escape gedrueckt!\n"); |
15 | else
|
16 | printf("Escape nicht gedrueckt!\n"); |
17 | Sleep(50); |
18 | }
|
19 | return 0; |
20 | }
|
Dankeschön, Hast schon Recht ich hatte nur nen 3 Wochen C-Crashkurs in der Firma :).
rhdfztk schrieb: > int main (int argc __attribute((_unused_)), char **argv __attribute((_unused_))) Was soll der Unsinn denn? Wenn du argc und argv nicht benutzt, dann definiere sie nicht. Das ist sinnvoller, als sie zu definieren und dann mit compilerspezifischen Erweiterungen den Code unleserlicher zu machen, nur damit der Compiler weiß, daß du die mit Absicht gar nicht benutzt.
Rolf Magnus schrieb: > rhdfztk schrieb: >> int main (int argc __attribute((_unused_)), char **argv > __attribute((_unused_))) > > Was soll der Unsinn denn? Wenn du argc und argv nicht benutzt, dann > definiere sie nicht. Ist das denn erlaubt? Bin kein C-Profi...
Ja.Ein konformer Compiler muß auf jeden Fall die argc/argv-Variante und die ganz ohne Parameter akzeptieren.
Das Programm funktioniert soweit :). Ist es möglich das Programm Transparent in dem Spiel anzeigen zu lassen? D.h. im Spiel sehe ich Rechts oben z.B dann die verbleibende Zeit bis das Ereignis passiert.
Rolf Magnus schrieb: > Ja.Ein konformer Compiler muß auf jeden Fall die argc/argv-Variante und > die ganz ohne Parameter akzeptieren. Gut zu wissen, danke für die Info. Sieht gleich viel eleganter aus. :-) (Ich dachte argc/argv seien Pflicht und wollte die Warnungen "unused variable" wegbekommen.) Autor schrieb: > Ist es möglich das Programm Transparent in dem Spiel anzeigen zu lassen? > > D.h. im Spiel sehe ich Rechts oben z.B dann die verbleibende Zeit bis > das Ereignis passiert. Gehen tut das vermutlich, aber nicht ohne größeres Gebastel mit der Windows-API. Ich kenne mich da nicht aus und imho ist das nichts für Anfänger...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.