Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Tastatureingabe

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
30.01.2007, 22:10 Uhr
Suba Esel



Damit geht allerdings nicht eine Art "Tastenkontrolle", oder? Der zeigt dann ja nur die ASCII - Zeichen an, oder?
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
30.01.2007, 22:12 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


was heißt "tastenkontrolle"? dur kriegst halt den ascii-wert der taste zurück die gedrückt worden ist, z.b 'Z' (also shift+z) oder 'z' (nur z) usw. Was du eben eingegeben hast.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
30.01.2007, 22:14 Uhr
Suba Esel



Ja, aber nicht ESC, F12, Backspace.... sowas halt
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
01.02.2007, 13:12 Uhr
Tron



Moin,

Guck mal hier: www.datasource.de/programmierung/tab01_tastaturcodes.html

Dann solltest Du Dir auchmal die C-Funktionen
kbhit()
und wie schon o.g. getch() bzw. _getch()

Was anderes fällt mir jetzt auf die schnelle für Konsole nicht ein.

Gruß Tron
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
01.02.2007, 18:51 Uhr
Suba Esel



@ Tron: genau so was suchte ich. Gibt es diese Funktion readkey auch in C++?
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
01.02.2007, 21:44 Uhr
Suba Esel



So, hab im Internet folgendes Beispiel gefunden, hab damit aber noch ein paar Probleme:


C++:
#include <iostream>
#include <windows.h>

std::string GetKey(int Key)
{
    std::string KeyString = "";
    else if (Key == VK_RETURN)
        KeyString = "[ENTER]";
    /*
    .
    .
    .
    */


    // so, hier gehen die Probleme los:

    else if (Key == 190 || Key == 110) // zwei Möglichkeiten für Punkt?
        KeyString = ".";
    else if (Key >=96 && Key <= 105) // 96 - 105? Was soll das denn sein?
        KeyString = Key-48; // s.o.
    else if (Key > 47 && Key < 60) // s.o
        KeyString = Key;

    if (Key != VK_LBUTTON || Key != VK_RBUTTON) // Taste?
    {
        if (Key > 64 && Key < 91) // ASCII - Alphabet?
        {
            if (GetKeyState(VK_CAPITAL)) // Jetzt plötzlich GetKeyState statt GetAsyncKeyState? Wo ist der Unterschied? Ich hab aus dem Netz, das Async den Wert asyncron abfragt. Was bedeutet das?
                KeyString = Key;
            else
            {
                Key = Key + 32;
                KeyString = Key;
            }
        }
    }

    return KeyString;
}

int main()
{
    while(1)
    {
        Sleep(5);

        for(int i = 8; i < 191; i++) /* offenbar durchläuft das Programm eine
        Schleife, in der i Tastaturcodes entspricht. Also VK_RETURN = ? oder
        wie? Und warum Start bei 8 und Ende bei 191? */

        {
           if(GetAsyncKeyState(i)&1 == 1) // &1? Ist "== 1" weglassbar, weil es nur um true geht?
           {
                std::string TempString = GetKey (i);
                if (TempString != "") std::cout << TempString << std::endl;
           }
        }
    }
}


--
Simon

Dieser Post wurde am 01.02.2007 um 21:46 Uhr von Suba Esel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
02.02.2007, 19:23 Uhr
Tron



@Suba Esel,

was soll es denn nun werden, Konsole oder Win32?

Wie mir scheint hast Du keine entsprechende Doku!
Empfehle Dir deshalb hol Dir das PSDK von Win oder benutz die MSDN Library!
Das sollte Dir Deine Fragen zu GetKeyState und GetAsyncKeyState beantworten.

VK_LBUTTON und VK_RBUTTON kann ich hier erstmal nicht deuten - Maus ? -
Woher Du die anderen Werte für die Tasten hast und was diese bedeuten sollen ?

Guck hier: www.fun-soft.de/showtopic.php?threadid=16127
Gibt glaube ich aber schon eine neuere, einfach mal bei MS reingucken.

Wenn es nun doch Win32 werden soll?!
Guck mal hier:
http://msdn2.microsoft.com/en-us/library/ms646268.aspx

Gruß Tron
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
03.02.2007, 19:49 Uhr
Suba Esel



Also: mir geht es darum, zu lernen, wie man z.B. in nem Spiel was steuern kann. Davon bin ich zwar noch ein bisschen entfernt, aber egal

Das Beispiel stammt hierher, ich hab das halt n bisschen umgeformt, weil das nicht ganz das ist, was ich haben will, und dafür gesorgt, dass bei "" nichts passiert.
Ob das jetzt Win32 oder Konsole ist? KA, weil das ja für Nicht - Konsole gedacht ist (zumindest später), aber ich das jetzt halt noch so hab.

Das aus der MSDN hab ich mir durchgelesen, allerdings reichte mein English nicht aus, um jetzt so wirklich den Unterschied zwischen GetKeyState und GetAsyncKeyState zu kapieren.
Außerdem wird da dauernd von einem High - Order / Low - Order - Bit geredet. :

Das mit dem if (key > 65 und so scheinen die Buchstaben zu sein, offenbar gibt GetAsyncKeyState dann die ASCII - Werte zurück. Wenn VK_CAPITAL, also die Festelltaste, nicht gedrückt ist, wird der ASCII - Code plus 32 gerechnet, dadurch erhält man die Kleinbuchstaben.
Die beiden Möglichkeiten für Punkt liegen daran, dass das Programm das Komma auf dem Ziffernblock als Punkt nimmt.
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
04.02.2007, 14:14 Uhr
Tron



@Suba Esel,

ich weiß zwar nicht wie lange Du Dich bereits mit C oder C++ beschäftigst, aber ich glaube Deine Einschätzung mit ein bisschen entfernt ist untertrieben.

Empfehle Dir Dich erstmal mit den Grundlagen vertraut zumachen, und damit meine ich nicht nur die der Programmiersprache sondern auch mit Bit/Byte/Oktett - Binär-/Hexadezimal-/Oktal-.
Das hilft Dir dann schon mal bei High - Order / Low - Order - Bit.
Wobei Du wissen solltes wie Dein Rechnersytem mit den Daten umgeht.
Stichwort Little Endian - Big Endian.

Das mit den Texten und Dokumentationen in English kann Dir hier keiner abnehmen,
mußt Du schon selber lesen. Ein gutes Wörterbuch und das I-Net helfen dabei.

SHORT GetKeyState(int virtualKey);
Parameter (virtueller TastaturCode) bei Buchsatben und Zahlen der ASCII-Code der Taste.
Rückgabe (16 Bit Interger)
High Order Bit 1 Taste ist gedrückt sonst 0.
Low Order Bit 1 Taste ist umgeschaltet (z.B: Caps Lock) sonst 0.

Der Rückgabewert kann durch den Aufruf der Funktion von einem anderen Thread
verändert werden.

SHORT GetAsyncKeyState(int vKey)
Parameter (einer von 256 virtuellen TastatorCode siehe Link).
High Order Bit 1 Taste ist gedrückt sonst 0.
Low Order Bit 1 Taste wurde nach dem Aufruf der Funktion gedrückt.

Dieses Bit gibt also Aufschluß ob die Taste seit der letzten Abfrage durch die Funktion gedrückt wurde.
Ist wichtig, kann ja auch von einem anderen Prog. aufgerufen worden sein.

Guck mal hier:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp

Gruß Tron
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
04.02.2007, 17:49 Uhr
Suba Esel



@ Tron: Das mit dem "ein bisschen" war auch egtl ironisch gemeint

Verstehe ich das jetzt richtig, dass GetKeyState einfach nur zurückgibt, ob grad ne Taste gedrückt ist, und GetAsyncKeyState, ob seit dem letzten Aufruf durch genau diese Funktion eine Taste gedrückt worden ist? Und bedeutet High - und Low - Order - Bit, dass das sozusagen eine Zahl mit zwei Stellen ist?

Besten Dank für den Link, das werd ich mir mal genauer ansehen.
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: