Taste emulieren

partitionist

Erfahrenes Mitglied
Ich hab folgendes Problem:

Code:
   do{
  	 for(;;)
    	  {
    		 if(_kbhit())
    		 {
    			 char zeichen = getch();
    			 if(zeichen == 'q')
    			 break;
    		}
   		StreamClient();	    	   
    	   }
    }

So wenn ich den Client gestartet habe, dann kann ich nur mir 'q' ins Hauptprogramm, aber ich möchte gerne den befehl "exit" eingeben damit der client geschlossen wird, deshalb würde ich gerne die taste 'q' emulieren nur wie? Hab gehört man kann das mit keyboard_event machen.
 
moin


Ist exit der einzige Befehl der an dieser Stelle angewendet werden können soll?


mfg
umbrasaxum
 
nein es gibt noch mehr, aber ich will unbedingt mit exit das programm schließen z.B.:

if(Eingabe == "exit")
{
//Taste 'q' emulieren
}
 
moin


Code:
int main()
{
	char befehl[20];
	char zeichen;
	int x = 0;

	do{
		for(;;)
		{
			cout<<"Ich laufe durch"<< endl;

			if(_kbhit())
			{
				while((befehl[x++] = getch()) != 13)
					cout<<befehl[x-1];

				befehl[x] = '\0';

				if(strcmp(befehl, "exit"))
				{
					cout<<"exit wurde eingegeben";
					befehl[0] = '\0';
					x = 0;
					cin.get();
				}

			}
			//StreamClient();       
		}
	}
	while(1);

	return 0;
}

Also es wird jetzt auf die Eingabe "exit" reagiert.
Um einen weiteren Befehl einzubinden pack unter if(strcmp(befehl, "exit")).....
einfach noch ein:
Code:
if(strcmp(befehl, "neuer Befehl"))
{
	cout<<"blablabla wurde eingegeben";
	befehl[0] = '\0';
	x = 0;
	cin.get();
}


mfg
umbrasaxum
 
Eigentlich meinte ich was anderes...
Code:
     do{
   	 for(;;)
     	  {
     		 if(_kbhit())
     		 {
     			 char zeichen = getch();
     			 if(zeichen == 'q')
     			 break;
     		}
    		StreamClient();	    	   
     	   }

StreamClient()..
Code:
  do{
  	 //Hier ist die Eingabe vom Client 
  	//if(Eingabe == "exit")
  	 ....q simulieren
  
  }

Also wenn der Client gestartet wird, kann man nur dort befehle starten und eins davon soll exit sein. Deshalb würde ich im Client die q taste simulieren ohne sie zu betätigen damit man aus der for-schleife rauskommt.
 
moin


if(Eingabe == "exit") geht nciht, das muss man mit strcmp machen.

Zum Thema:
Du müsstest ein q in den Tastaturpuffer schreiben, da würde getch() aufjedenfall drauf anspringen, bei kbhit bin ich mir aber nciht sicher.


mfg
umbrasaxum
 
Ich muss unbedingt aus der for schliefe raus gibt es keine funktion bei der man ein zeichen angibt und diese dann betätigt wird z.b. keyboard_event('q') ?
 
moin


Du meinst wohl die Funktion:
MSDN hat gesagt.:
VOID keybd_event( BYTE bVk,
BYTE bScan,
DWORD dwFlags,
PTR dwExtraInfo
);

Eine andere Möglichkeit wäre, die for-Schleife durch eine while-Schleife zu ersetzen und mit einer Bedingung zu versehen, die du einfach erfüllst.
Code:
int bedingung = 1; //global!

do{
     while(bedingung)
       {
      if(_kbhit())
      {
      char zeichen = getch();
      if(zeichen == 'q')
      break;
     }
    StreamClient();       
}

StreamClient:
Code:
  do{
   //Hier ist die Eingabe vom Client 
  //if(Eingabe == "exit")
   ....q simulieren
  
       bedingung = 0;
  }

Du verstehst?


mfg
umbrasaxum
 
Zurück