tutorials.de Buch-Aktion 05/2012
Like Tree4Danke
  • 1 Beitrag von Muepe32
  • 1 Beitrag von MSVCplusplus
  • 1 Beitrag von Muepe32
  • 1 Beitrag von Muepe32
ERLEDIGT
JA
ANTWORTEN
14
ZUGRIFFE
408
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    CodeCrafterCpp CodeCrafterCpp ist offline Mitglied Gold
    Registriert seit
    Nov 2011
    Beiträge
    148
    Hallo,
    Ich weiß nicht ob es schon so ein Thema gibt hab bei google und hier nichts gefunden nur zu WinApi. Ich frage mich ob es möglich in einer Konsolen Anwendung sobald zb ESC gedrückt wird das Programm beendet wir. Also ich möchte das sobald irgendwo im Spiel ESC gedrückt wird wird das Spiel beendet. Bei cin muss man noch enter Drücken und das geht eh nicht mit Esc und getch muss man ja eine Taste drücken und ich will halt das man keine Tastedrücken muss aber sobald man es tut wird geschaut ob es Esc ist.

    Ps: tut mir leid wenn das Doppelpost ist da ich denke das es irgendwo ein Thema scho gibt aber ich das nicht gefunden hab.

    mfG
     

  2. #2
    Avatar von MSVCplusplus
    MSVCplusplus MSVCplusplus ist offline Mitglied Brokat
    Registriert seit
    Dec 2010
    Ort
    Hessen
    Beiträge
    336
    Dazu währe eine Spielschleife ganz gut. Die könnte bei jedem durchgang prüfen ob Escape gedrückt wurde, und dann einfach return 0; . Aber sonst kenne ich keinen anderen Weg.
    Müsstest halt eine Schleife in einem anderen Thread machen, die immer auf Tasten prüft. Oder wenn du ein Fenster hättest, einfach in dem WM_KEYDOWN Handle dei Taste filtern und wenn ESC->exit.
    MfG
     
    Fehlermeldung bitte!
    Google - Dein Freund und Helfer

  3. #3
    CodeCrafterCpp CodeCrafterCpp ist offline Mitglied Gold
    Registriert seit
    Nov 2011
    Beiträge
    148
    Ja wie gesagt Konsole und Spielschleife hab ich gibt es denn so was das einfach nur schaut ob Esc down ist oder muss man cin oder so benutzen?
     

  4. #4
    Avatar von Muepe32
    Muepe32 Muepe32 ist offline Mitglied Brokat
    Registriert seit
    Mar 2011
    Beiträge
    353
    Hallo. Solche Sachen sind in der Regel abhängig vom Betriebssystem. Eine Variante für Windows wäre:
    GetKeyState
     
    Viele Tutorials und Artikel zur Programmierung unter Windows mit C++ und C#. Tägliche Updates und Antworten auf eure Fragen:
    Win32Easy - Blog
    Es würde mich freuen, wenn ihr einen Kommentar postet!

  5. #5
    CodeCrafterCpp CodeCrafterCpp ist offline Mitglied Gold
    Registriert seit
    Nov 2011
    Beiträge
    148
    Ist das nicht Winapi?
     

  6. #6
    Avatar von Muepe32
    Muepe32 Muepe32 ist offline Mitglied Brokat
    Registriert seit
    Mar 2011
    Beiträge
    353
    Doch, daher ja auch die charmante Beilage "Eine Variante für Windows"
     
    Viele Tutorials und Artikel zur Programmierung unter Windows mit C++ und C#. Tägliche Updates und Antworten auf eure Fragen:
    Win32Easy - Blog
    Es würde mich freuen, wenn ihr einen Kommentar postet!

  7. #7
    Avatar von MSVCplusplus
    MSVCplusplus MSVCplusplus ist offline Mitglied Brokat
    Registriert seit
    Dec 2010
    Ort
    Hessen
    Beiträge
    336
    Ich würde aber GetAsyncKeyState Emfehlen
    Ja das ist WinAPI. Wieso schreibst du Plattformunabhängik? Du kannst WinAPI trotzdem benutzen auch ohne Fenster
    EDIT: Ups zu langsam
     
    Fehlermeldung bitte!
    Google - Dein Freund und Helfer

  8. #8
    CodeCrafterCpp CodeCrafterCpp ist offline Mitglied Gold
    Registriert seit
    Nov 2011
    Beiträge
    148
    Muss ich dann auch statt main() winmain benutzen?
     

  9. #9
    Avatar von Muepe32
    Muepe32 Muepe32 ist offline Mitglied Brokat
    Registriert seit
    Mar 2011
    Beiträge
    353
    Das Problem mit GetAsyncKeyState und GetKeyState ist, dass es dir auch zurückgibt, dass der Knopf gedrückt ist, wenn dein Fenster nicht den Inputfokus hat (zum Beispiel minimiert in der Taskleiste).

    @CodeCrafterCpp: Nein, die WinMain-Funktion als Einstiegspunkt ist sozusagen der Indikator für Visual Studio keine Konsole zu verwenden.
    CodeCrafterCpp bedankt sich. 
    Viele Tutorials und Artikel zur Programmierung unter Windows mit C++ und C#. Tägliche Updates und Antworten auf eure Fragen:
    Win32Easy - Blog
    Es würde mich freuen, wenn ihr einen Kommentar postet!

  10. #10
    CodeCrafterCpp CodeCrafterCpp ist offline Mitglied Gold
    Registriert seit
    Nov 2011
    Beiträge
    148
    Kann ich denn irgendwie schauen ob meine Konsole im Inputfokus ist?
     

  11. #11
    Avatar von MSVCplusplus
    MSVCplusplus MSVCplusplus ist offline Mitglied Brokat
    Registriert seit
    Dec 2010
    Ort
    Hessen
    Beiträge
    336
    Wenn ich mich nicht irre mit GetWindow oder GetHWND sry ich weiß es nicht mehr, aber du kannst setzten ob es den Inputfokus haben soll
    MfG
    CodeCrafterCpp bedankt sich. 
    Fehlermeldung bitte!
    Google - Dein Freund und Helfer

  12. #12
    Avatar von Muepe32
    Muepe32 Muepe32 ist offline Mitglied Brokat
    Registriert seit
    Mar 2011
    Beiträge
    353
    Ja klar, eine Möglichkeit wäre folgendes:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
        SHORT state = GetAsyncKeyState(VK_ESCAPE);
        while(true) {
            if(GetForegroundWindow() == GetConsoleWindow()) {
                if((state & 0x8000) != 0)
                    break;
            }
     
            state = GetAsyncKeyState(VK_ESCAPE);
            Sleep(0);
        }
        return 0;
    CodeCrafterCpp bedankt sich. 
    Viele Tutorials und Artikel zur Programmierung unter Windows mit C++ und C#. Tägliche Updates und Antworten auf eure Fragen:
    Win32Easy - Blog
    Es würde mich freuen, wenn ihr einen Kommentar postet!

  13. #13
    CodeCrafterCpp CodeCrafterCpp ist offline Mitglied Gold
    Registriert seit
    Nov 2011
    Beiträge
    148
    Ok ich bin nicht so der OverPro und was macht 0x8000 also was ist das und wie bist du drauf gekommen.

    EDIT: Mein Fehler
    Geändert von CodeCrafterCpp (10.12.11 um 22:55 Uhr)
     

  14. #14
    Avatar von Muepe32
    Muepe32 Muepe32 ist offline Mitglied Brokat
    Registriert seit
    Mar 2011
    Beiträge
    353
    In der Beschreibung von GetAsyncKeyState findest du den Satz:
    Zitat Zitat von http://msdn.microsoft.com/en-us/library/windows/desktop/ms646293(v=vs.85).aspx
    If the most significant bit is set, the key is down, [...]
    In einem SHORT ist das höchste Bit auf meiner Plattform das 16te Bit, also 2^15 = 32768, das ist Hexadezimal 0x8000. 0x8000 ist binär als 1000 0000 0000 0000. Rechnet man das Ergebnis mit dieser Zahl binär UND (1 UND 0 = 0, 1 UND 1 = 1, 0 UND 1 = 0, 0 UND 0 = 0) so erhält man also genau entweder 0, wenn das höchste Bit 0 ist und 1000 0000 0000 0000, wenn das höchste Bit 1 ist.

    Eine allgemein Variante die unabhängig von der Grösse des Shorts funktioniert wäre folgende:
    Code cpp:
    1
    
    ((~(SHORT)0) ^ (SHRT_MAX >> 1))
    CodeCrafterCpp bedankt sich. 
    Viele Tutorials und Artikel zur Programmierung unter Windows mit C++ und C#. Tägliche Updates und Antworten auf eure Fragen:
    Win32Easy - Blog
    Es würde mich freuen, wenn ihr einen Kommentar postet!

  15. #15
    CodeCrafterCpp CodeCrafterCpp ist offline Mitglied Gold
    Registriert seit
    Nov 2011
    Beiträge
    148
    Ok danke bin in Binär rechnen nicht so gut denke aber ich konnte dir Folgen.
     

Ähnliche Themen

  1. [C#] Konsolen-Ausführung happert
    Von Hawkings im Forum .NET Windows Forms
    Antworten: 0
    Letzter Beitrag: 09.04.08, 12:36
  2. Konsolen Oberfläche
    Von bi0h4zard im Forum C/C++
    Antworten: 12
    Letzter Beitrag: 01.03.08, 19:37
  3. Konsolen Ein- und Ausgabe
    Von RMI_17 im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 15.09.05, 10:52
  4. Menü in DOS-Konsolen
    Von ProgFreak im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 20.04.04, 14:04