Frage zu VK_s



  • Hallo!

    Also, ich wollte mal die VK_s in meinem Progrramm benutzen, aber leider klappt das bei mir nicht so. Ich weis, dass die zuerst 0 oder 224(bzw -32 wegen char) geben und dann erst den eigentlichen Wert. Also, hab ich dann mal 2 _getch() hintereinander gemacht, aber des ging immr noch net.

    Und dann hab ich mal folgendes Test Programm geschrieben:

    #include <stdio.h>
    #include <conio.h>
    
    void main(){
    
    char x;
    while(true){
    x=_getch();
    printf("%i\n\n",x);
    x=_getch();
    printf("%i\n\n",x);
    }
    
    }
    

    Und wenn ich dann z.B hoch drücke, dann erhalt ich für das 'erste* x -32(was normal is) und fürs 'zweite' x aber 72Laut winuser.h is das aber falsch.
    Ich könnte jetzt zwar einen header schreiben, mit defines usw. aber 72 is doch auch gleichzeitig der ASCII code for 'H'! Dann könnte ein User durch zufälliges drücken von H dann z.B. auch ein hoch "nachmachen"!

    Hat einer da ne Lösunng? Könnte des mal jemand an seinem rechner probieren, ob's bei ihm mein kleines "proggy" genauso funzt bzw. ob bei ihm überhaupt die VK_s von winuser.h/windows.h klappen?

    Ach ja, kommt jetzt bitte net mit MSDN oder FAQ, da hab ich schon genug drin geguckt, aber es klappt einfach nicht... 😉

    ➡ Thx im voraus!

    P.s: Ich hab Win XP und den MSVC++ 6.0, wenn das was hilft!



  • Programmierst du hier C-Konsolenanwendungen oder WinAPI 😕 🙄
    _getch hat nämlich nicht besonders viel mit WinAPI zu tun da gibst hier z.B. Sachen wie WM_KEYDOWN - Messages, die du abfangen kannst.

    Was hast du denn vor, oder soll ich dich ins Konsolen-Forum verschieben?



  • Mr.X schrieb:

    Hallo!

    Also, ich wollte mal die VK_s in meinem Progrramm benutzen,

    Wollte ich auch schon immer mal. Nur was zur Hölle ist das?

    aber leider klappt das bei mir nicht so. Ich weis, dass die zuerst 0 oder 224(bzw -32 wegen char) geben und dann erst den eigentlichen Wert.

    Sorry, Glaskugel kaputt. geht das auch in verständlichen deutsch?

    Also, hab ich dann mal 2 _getch() hintereinander gemacht, aber des ging immr noch net.

    Du liest also zwei Eingabane aus der Konsole. Was hat das mit VK_s zu tun. /me der immer noch nicht weiß wo von eigentlich die Rede ist

    Und dann hab ich mal folgendes Test Programm geschrieben:

    #include <stdio.h>
    #include <conio.h>
    
    void main(){
    
    char x;
    while(true){
    x=_getch();
    printf("%i\n\n",x);
    x=_getch();
    printf("%i\n\n",x);
    }
    
    }
    

    Und wenn ich dann z.B hoch drücke, dann erhalt ich für das 'erste* x -32(was normal is) und fürs 'zweite' x aber 72Laut winuser.h is das aber falsch.
    Ich könnte jetzt zwar einen header schreiben, mit defines usw. aber 72 is doch auch gleichzeitig der ASCII code for 'H'! Dann könnte ein User durch zufälliges drücken von H dann z.B. auch ein hoch "nachmachen"!

    Mal so ins blaue geraten (was anderes ist hier wohl nicht möglich) KeyUp und KeyDown?

    Hat einer da ne Lösunng?

    Ich habe noch nicht mal verstanden, was du vorhast geschweige, denn wo dein Problem ist.

    Könnte des mal jemand an seinem rechner probieren, ob's bei ihm mein kleines "proggy" genauso funzt bzw. ob bei ihm überhaupt die VK_s von winuser.h/windows.h klappen?

    Warum sollte bei mir was anderes rauskomman als bei dir?

    Ach ja, kommt jetzt bitte net mit MSDN oder FAQ, da hab ich schon genug drin geguckt, aber es klappt einfach nicht... 😉

    Kein Angst, ich komme mit was ganz anderem: Setz dich mal für fünf Minuten in eine Ecke und denk mal darüber nach, was du willst.

    Mein ersatz Glaskugel sagt mir die willst irgendwelche virtuellen Tatstaurcodes abfangen. Die bekommst du aber nur über WM_KEYDOWN und Konsorten. Sprich du brauchst ein Fenster mit einer MessageLopp und einer Fensterfunktion.



  • @flenders: nö ich mach konsolenanwendungen, aber ich dachte irgendwie dass das eher in WinAPI reinpasst, weil ja die VK_s in windows.h drinne sind...

    @luckie
    Zitat

    Wollte ich auch schon immer mal. Nur was zur Hölle ist das?

    Wenn du keine Ahnung hast, dann brauchst du auch net posten :p

    Zitat:

    Sorry, Glaskugel kaputt. geht das auch in verständlichen deutsch?

    sag mal, machst du jetz nunr so oder bist du einfach zu doof?
    weil char von -128 bis 127 geht. deswegen werden zahlen(bzw zeichen)
    größer 127 als negative dargestellt. frag jetzt bitte nicht warum, aber is IST so!!!

    Zitat:

    Du liest also zwei Eingabane aus der Konsole. Was hat das mit VK_s zu tun. /me der immer noch nicht weiß wo von eigentlich die Rede ist

    Wenn du mir erklärtst, wie man sonst so tasten wie hoch oder runter oder F1 auslesen kann, dann sags doch und zeih einen net die ganze zeit runter...

    Zitat:

    Kein Angst, ich komme mit was ganz anderem: Setz dich mal für fünf Minuten in eine Ecke und denk mal darüber nach, was du willst.

    Denk du erst mal 5 minuten nach bevor du auf einen post antwortest! :p

    ------------------------

    Aber trotzdem hat vielleicht einer ne Idee wie man in der Konsole "Sondertasten" wie Pfieltasten oder F... tasten auslesen kann. Ich habs mit VK_s versucht, was aber net funzt.

    Hoff mal, das war jetz verständlich ausgedrückt, auch für dich Luckie! :p

    ➡ Kann jemand helfen?



  • Dürfte ich deine Problem noch mal so darstellen, dass es auch verstanden wird? Danke.

    "Ich will in einer Konsolenanwendung auf die virtuellen Tasten wie zum Beispiel Pfeil hoch und Pfeil runter reagieren. Wie mache ich das?"

    Geht doch oder? 🙄



  • gäähn....

    bevor ihr anfangt mit Glaskugeln zu werfen:

    #include <stdio.h>
    #include <conio.h>
    #include <windows.h>

    void main(){

    char x;
    while(true){
    x=_getch();
    printf("%c\n\n",x);
    if (x==VK_RETURN)
    exit (0);
    }

    }

    Da ist jetzt der VK_ENTER abgefragt worden, der dann das Programm beendet.
    mit VK_UP geht's nicht, weil dafür sog. Scancodes benutzt werden (siehe Scan-Code-Tabelle: www.asciitable.com), da wirst du die Kombination "0 72" auch wiederfinden.

    Für die VK_UP Abfrage würde ich dir halt einfach das hier:
    if (x=='H')
    exit (0);
    empfehlen.

    Mit den Window-Messages funktioniert das mit den "VK_s" korrekt.

    Deine Frage war allerdings ziemlich komisch formuliert.



  • und wenn dus ohne windowsapi machen willst, bist ja gerade im konsolenforum, dann schau ins konsolenfaq oder mach es so

    int main(){
        unsigned char chr;
    
    do
    	{
    	chr=getch();
            printf("%i",chr);
    		if ((chr==224) || (chr==0))
    		{
    			chr=getch();
                printf("%i",chr);
    
    			switch(chr)
    			{
    
                case 13:
                    printf("go");
    					break;
    				case 75:                            
    					printf("<-");
    					break;
    
    				case 77:                           
    					printf("->");
    
    					break;
    
    				case 83:                            
    					printf("ENTF");
                        break;
    
    				case 82:                            
    					printf("EINF");
    					break;
    
    				case 80:                           
    					printf("pfeil nach unten");
    
                        break;
    				case 79:  
                        printf("ENDE");                           
    
    				break;
                    case 72:  
                        printf("pfeil nach oben");                           
    
    				break;
    			}
    		}
    	}while(true);
    
        return 0;
    }
    

Anmelden zum Antworten