Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

1

29.07.2007, 21:43

Taste druecken

Hey ,

ich moechte in der konsole waehrend eines laufenden Programms eine Taste druecken koennen zb I wodurch etwas ausgeloest wird.
Er soll aber nicht auf die Taste warten also keine schleife der Programm Fluss soll nicht behindert werden ... gibt es sowas koennt ihr mir ein kleines beispiel dazu posten ?

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

29.07.2007, 22:01

Unter Windows - WinAPI - GetAsyncKeyState(int vKey)
Beispiel gibts nich von mir, schau halt ma in die MSDN ;)

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

3

30.07.2007, 01:04

Thx werde mal suchen , stichwort hat mir schon gereicht :D

Habs nun so , kannst du mir sagen ob das richtig ist ?

C-/C++-Quelltext

1
2
3
4
void GetAsyncKeyState( VK_LCONTROL)
{
cout <<" Left controle";
}


wird das nun aufgerufen sobald ich left controle druecke ? Bin nicht zu hause um es zu testen

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

4

30.07.2007, 04:13

Ähh?? Nein das ist irgendwie total falsch ^^ Der fünfte Eintrag einer Google-Suche nach "GetAsyncKeyState" liefert diesen MSDN-Eintrag. Als Parameter übergibst der Funktion einen int-Wert, der den Button angibt, den du prüfen möchtest. Der Rückgabewert gibt dann an, ob die Taste gedrückt ist oder nicht. Wie genau das bestimmt ist steht unter "Return Value" im MSDN-Eintrag. ;)

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

5

30.07.2007, 10:37

Ach jetzt versteh ich erst, was du wolltest O_o

Ich dachte du willst einfach im laufenden Code an bestimmten Stellen testen, ob eine Taste gedrückt ist. Was du anscheinend willst ist sozusagen ein Event, wenn eine Taste gedrückt ist.
Da wirst du wahrscheinlich um Threads nicht drumrum kommen. Spontan würde ich sagen, ein Hauptthread und einer, der in einer Schleife alle Tasteneingaben die du verarbeiten willst testet und dann entsprechend reagiert - aber kann auch sein, dass es ne einfachere oder bessere Lösung gibt...

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

6

30.07.2007, 10:44

Event würde heißen, wenn die Taste gedrückt wird, soll eine bestimmte Funktion aufgerufen werden. Kann man doch ganz leicht selbst realisieren wenn man eine Abfrage einbaut:

C-/C++-Quelltext

1
2
3
4
5
6
if (GetAsyncKeyState( VK_LCONTROL))
    EventFunktionLControl();
if (GetAsyncKeyState( VK_RCONTROL))
    EventFunktionRControl();

//usw

Die Abfrage dann halt einmal pro Frame ausführen, oder wenn du es brauchst.

PS Ich weiß nicht was die Funktion zurückgibt, also wahrscheinlich funzt das mit den if Abfragen nicht genau so.

7

30.07.2007, 11:39

Du könntest es auch einmal mit den Windowsnachrichten versuchen. Du musst einfach WM_KEYDOWN aus der Nachrichtenschleife abfangen.
Infos gibt es in der MSDN: MSDN
Tutorials zu OpenGL, Ubuntu und Programmieren allgemein: www.tomprogs.at

Forum und Wiki zum Programmieren lernen: proggen.org/forum.proggen.org

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

8

30.07.2007, 12:12

_Tom_

Zitat

ich moechte in der konsole...

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

9

31.07.2007, 22:51

Das Problem mit dem If ist das es im Kompletten Programm vorhanden sein muss egal wo man diese Taste drueckt also an welcher stelle im Programmcode soll diese funktion aufgerufen werden. Und der COde ist ziemlich Groß

Hab das ganze nun mal so gepackt :

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
int Interface()
{

    keybd_event(VK_CONTROL,0x9d,0 , 0);
    keybd_event(VK_TAB,0x09,0 , 0); 
    keybd_event(VK_TAB,0x09,KEYEVENTF_KEYUP,0); 
    keybd_event(VK_CONTROL,0x9d,KEYEVENTF_KEYUP,0);
    system("cls");
    cout <<"klappt";
    system("pause");

}


Aber es tut sich nichts wenn ich die tasten druecke

10

31.07.2007, 23:00

Dann musste das Event in der Nachrichtenschleife des Fensters abfangen.
Mein Projekt: Rise of the Sylvan

Werbeanzeige