• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

Tastatureingaben kreieren in C++

rumkugel

Anfänger/in
Mitglied seit
26.03.2008
Beiträge
56
Reaktionspunkte
0
Ich hab in der ( noch ) aktuellen PCGH auf der letzten Seite bei Rossi`s Restekiste von einem Gerät gelesen das zufällige Tastatureingaben kreiert. Mich würde mal interessieren wie man per Software tastatureingaben erstellt. Im Internet ist dazu nix zu finden ( oder ich bin schlecht im Suchen ). WEnn einer eine Idee hat und auch noch C++ kann ( ist die einzige Sprache die ich halbwegs verstehe ) würde ich mich über einen Antwort sehr sehr freuen.
 
Vielen dank für die antworten doch so ganz hilft mir das noch nicht weiter. Ich müsste noch einige dinge von dieser funktion wissen und da mein englisch nicht das beste ist kann ich sie nicht der genannten Internetseite entnehmen.

Also: 1. Was für Parameter hat diese funktion? ( bitte ausführlichere Erklärung )
2. Wo erscheint der Text den diese funktion ausgibt ( im aktuellen Fenster?)
 
Naja schade das keiner helfen konnte. Muss ich wohl woanders fragen. ;(
 
rumkugel am 25.08.2008 12:45 schrieb:
Naja schade das keiner helfen konnte. Muss ich wohl woanders fragen. ;(

Einfach "keybd_event c++ " in Google eingeben und auf "deutsch" stellen !

PS: Wenn man programmieren will sollte man schon halbwegs Englisch können ;)
 
The_Linux_Pinguin am 25.08.2008 17:55 schrieb:
http://www.c-plusplus.de/forum/viewtopic-var-t-is-165868.html ?

Danke das war schon mal die hilfreichste Seite. aber die Parameter sind da noch immer nicht erklärt und das ist worauf es mir ankommt, da mir Variabeltypen wie BYTE usw noch nie beim Programmieren über den Weg gelaufen sind.
 
rumkugel am 25.08.2008 20:10 schrieb:
The_Linux_Pinguin am 25.08.2008 17:55 schrieb:
http://www.c-plusplus.de/forum/viewtopic-var-t-is-165868.html ?

Danke das war schon mal die hilfreichste Seite. aber die Parameter sind da noch immer nicht erklärt und das ist worauf es mir ankommt, da mir Variabeltypen wie BYTE usw noch nie beim Programmieren über den Weg gelaufen sind.

Aklso wenn du nicht weißt was ein BYTE ist - dann solltest du dir vor dem Programmieren mal ein C Tutorial reinziehen ;)
 
Eol_Ruin am 25.08.2008 20:50 schrieb:
rumkugel am 25.08.2008 20:10 schrieb:
The_Linux_Pinguin am 25.08.2008 17:55 schrieb:
http://www.c-plusplus.de/forum/viewtopic-var-t-is-165868.html ?

Danke das war schon mal die hilfreichste Seite. aber die Parameter sind da noch immer nicht erklärt und das ist worauf es mir ankommt, da mir Variabeltypen wie BYTE usw noch nie beim Programmieren über den Weg gelaufen sind.

Aklso wenn du nicht weißt was ein BYTE ist - dann solltest du dir vor dem Programmieren mal ein C Tutorial reinziehen ;)

Also da in die Variabel kann ich soviel reinschreiben wie in ein Byte reinpasst?
Bleiben aber noch ne ganze Menge an Fragen und Problemen.
 
bin von beruf her Programierer, kann dir wohl weiterhelfen, das Geraet tut so als waere es eine Tastatur, die ja die Tastsautreingeaben absendet

aenliches wuerde passieren wenn du einfach den tastaturtreiber ueberschreibst, der dann zufaellig was abschickt.

also zu dem prinzipiellem verlauf bei usb:
die tastatur kann keine eingaben absenden, sondern kann nur auf anfragen antworten, sprich
jede milisekunde *hast du eine eingabe?* --> tastatur antwortet
wass am ersten blick weltfrend erscheint hat einen sin, naemlich dass nicht anfragen und meldungen gleichzeitig kommen, sprich dass nicht alle durcheinanderreden
(ehrer bei sticks das probelm)
der maustreiber schickt diese anfragen, und leitet die ergebnisse an das os weiter.

hoffe ich konnte dir weiterhelfen
 
raytraceing-man am 25.08.2008 21:45 schrieb:
bin von beruf her Programierer, kann dir wohl weiterhelfen, das Geraet tut so als waere es eine Tastatur, die ja die Tastsautreingeaben absendet

aenliches wuerde passieren wenn du einfach den tastaturtreiber ueberschreibst, der dann zufaellig was abschickt.

also zu dem prinzipiellem verlauf bei usb:
die tastatur kann keine eingaben absenden, sondern kann nur auf anfragen antworten, sprich
jede milisekunde *hast du eine eingabe?* --> tastatur antwortet
wass am ersten blick weltfrend erscheint hat einen sin, naemlich dass nicht anfragen und meldungen gleichzeitig kommen, sprich dass nicht alle durcheinanderreden
(ehrer bei sticks das probelm)
der maustreiber schickt diese anfragen, und leitet die ergebnisse an das os weiter.

hoffe ich konnte dir weiterhelfen

Ja vielen Dank das hat mich schon mal sehr viel weiter gebracht bei meinem Verständnis für die Theorie. Mich interessiert aber noch wie man das praktisch in c++ Code umsetzen kann. Mir wurde im Thread ja schon die kebd_event Funktion genannt, deren Parameter ich leider noch nicht verstehe. Ich weiß das die Erklärung dafür etwas viel Schreibarbeit bedeutet aber darüber würde ich mich riesig freuen.
 
rumkugel am 26.08.2008 12:52 schrieb:
raytraceing-man am 25.08.2008 21:45 schrieb:
bin von beruf her Programierer, kann dir wohl weiterhelfen, das Geraet tut so als waere es eine Tastatur, die ja die Tastsautreingeaben absendet

aenliches wuerde passieren wenn du einfach den tastaturtreiber ueberschreibst, der dann zufaellig was abschickt.

also zu dem prinzipiellem verlauf bei usb:
die tastatur kann keine eingaben absenden, sondern kann nur auf anfragen antworten, sprich
jede milisekunde *hast du eine eingabe?* --> tastatur antwortet
wass am ersten blick weltfrend erscheint hat einen sin, naemlich dass nicht anfragen und meldungen gleichzeitig kommen, sprich dass nicht alle durcheinanderreden
(ehrer bei sticks das probelm)
der maustreiber schickt diese anfragen, und leitet die ergebnisse an das os weiter.

hoffe ich konnte dir weiterhelfen

Ja vielen Dank das hat mich schon mal sehr viel weiter gebracht bei meinem Verständnis für die Theorie. Mich interessiert aber noch wie man das praktisch in c++ Code umsetzen kann. Mir wurde im Thread ja schon die kebd_event Funktion genannt, deren Parameter ich leider noch nicht verstehe. Ich weiß das die Erklärung dafür etwas viel Schreibarbeit bedeutet aber darüber würde ich mich riesig freuen.

ok, wen du es wissen wilst,

in cpp sieht dass dann etwa so aus


kebd_event(int);

der int(int ist eine 32-bit zahl zwishen 0 und 4G)
ist eine zahl, die ueber zuordnungstabellen(seit win95 unicodehttp://de.wikipedia.org/wiki/Unicode)

wenn ich jetzt z.B sage *a* ist 33, und du tippst 33, sendet das os kebd_event(33) an das betriebssystem.

uebrigens ist in unicode *a* und *A* vollig unterschiedlich, das interface zwishen keyboard und -treiber gescheht normalerweise ueber bytes(0 bis 127)

um dass mal verstaendlich zu erklaeren:

fuer jede taste am kbd gibt es eine zahl, mit der das kbd dann auf die anfragen antwortet.

und jetzt hat der treiber die taste, und schaut zuerst ob es eine normale taste oder eine sondertaste ist(shift, capslock, control, meta...)

jetzt kennst du sicher die tastaturlayauts(qwerty, qwertz....) in diesen layouts steht dann z.B
{
taste 27 + caps = unicode.1254
taste 27 = unicode.223
taste 27 + alt gr = unicode.1948
taste 28 + .....
.....
.....
}
die jeweilige unicode-zahl scickt der treiber dann an das betriebssystem, was z.B die taste an das textbearbeitungsprogramm weiterschickt, wass es dann mit berechneten x und y koordinaten, schriftgroese und art an den grakatreiber weiterschickt......

denkste garnicht was der pc da fuer berechnungen anstellt nur dass du den buchstaben auf dem bildschirm siehst.

(und dass ist nur die vereinfachte form.........)
 
@raytraceing-man

Vielen Dank das war genau das was mich interessiert. Genau so eine Anleitung wollte ich hören. Nur ein Problem : Wenn ich das ausprobiere nämlich:

#include <iostream>
#include <windows.h>

using namespace std;

int main ( void )
{
int i = 1;
while ( i = 1)
keybd_event ( 33 );
system ("pause");
return 0;
}

sagt mir mein Compiler :
1>c:\users\internet\documents\visual studio 2008\projects\a\a\a.cpp(10) : error C2660: 'keybd_event': Funktion akzeptiert keine 1 Argumente


beim schreiben dieses Quelltextes zeigt er mir weiterhin an das die Funktion drei Parameter braucht.
Was nun?
 
Ich kann zwar kein C++, aber anscheinend bin ich der einzige User der Google nutzt. :o

-> http://entwickler-forum.de/showthread.php?t=36584

Code:
keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), 0, 0 );
Die Alternativen zu VK_SHIFT findest du hier: http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx

Was die Parameter bedeuten kann ich dir notfalls auch erklären, aber eigentlich steht alles in der API: http://msdn.microsoft.com/en-us/library/ms646304(VS.85).aspx
 
@bsekranker

man sieht dass du kein cpp kanst, dass ist naemlich das einstellen der SHIFT- taste ;)

/

bin jetzt grad leider in der arbeit, hab da kein cpp, nur java, werds dann aber zuhause nachholen.
(immer diese himmlischen pausen wo compeiliert wird, und man 15-20 min einfach surfen kann)

nee, dachte kaum dass du dass ausprobieren willst, hatte es vorher gar nicht getestet :-D
hab nur von meiner erfahrung von usb, treiber und 8 jahre cpp, 6 jahre java heraus geschrieben....

hatten mal in der uni ein projekt wo wir n maustreiber schrieben
(dass war glaub ich dos mit nem 386 in 16 bit... und der hat mir +30.000 schilling gekostet( = ca 2.700euro, hab in wien studiert))

ok, bevor ich hier zuviel schmarn erzaehle, oder nostalgish werde:

ich prowiers mal aus, lass leute nicht gern *im stich*, mein tipp aber:

schreib einfach 0, oder so... und schau wass rauskommt...
schau dann mal was fuer ein datentyp sie sind, waehle dementsprechen null oder this oder false....
 
raytraceing-man am 27.08.2008 15:53 schrieb:
ahhhhhh.... ich habs...
hat sich wohl doch viel geaendert seit dos....
kebd_event gibts nicht mehr, stadtdessen sendInput http://msdn.microsoft.com/en-us/library/ms646310(VS.85).aspx

[EDIT]

ach ja es ist anzumerken dass ich bsdkrankers quelle nutze, nur eine andere seite, und dass du nicht so gut english kannst, ich setz dan daheim alles in code und copiers der rueber...

So viel Aufwand für mich!! Ich bin zutiefst gerührt :-D
Danke
 
raytraceing-man am 27.08.2008 15:49 schrieb:
@bsekranker

man sieht dass du kein cpp kanst, dass ist naemlich das einstellen der SHIFT- taste ;)
Und das heißt jetzt was?

Der Threadersteller wollte Tastatureingaben erstellen - ich hab ihm gezeigt wie er das Drücken der Shift-Taste simuliert und eine Tabelle, in der alle anderen Tasten aufgeschlüsselt sind. Der Rest erklärt sich ja von selbst.
 
sry, es ist gar nicht weg, es ist nur *empfohlen nicht zu nutzen* aber das sendInput ist vll fuer die meisten sinnvoll, fuer deine anwendung aber nicht, da die deklaration zu umstaendlich ist fuer ein paar zufaellige keyboardInputs

also,

#include <windows.h>
#include <iostream>
using namespace std;

void tastatureingabe()
{

while(true){
int x = 10;
srand(GetTickCount());
int i = rand()%x;

if(i < 1){

i = 30;
x--;

}
if( i > 254){

i = 40;
x++;

}

keybd_event( i,
0x45,
KEYEVENTF_EXTENDEDKEY | 0,
0 );
keybd_event( i,
0x45,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);

}
}

void main()
{
tastatureingabe();
}




das programm sollte zimlich zufaellige tastatureingaben liefern

(ach ja, dass system sollte ein bischen *instabil* werden :B )
 
Zurück