Laden...

Mit SendKeys Eingaben an ein Spiel senden

Erstellt von youngSTAR vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.485 Views
Y
youngSTAR Themenstarter:in
17 Beiträge seit 2009
vor 14 Jahren
Mit SendKeys Eingaben an ein Spiel senden

Guten Morgen!

Also, ich wollte ein Prog. schreiben, welches die Buchstaben a - z ausgibt (per Sendkeys).

Mein Ziel ist es, mein Prog auf ein Spiel wirken zu lassen, wo "wörter" von oben runter geschossen kommen, und man in kürzester Zeit das Wort "getippt" haben muss.

Ich habs via Timer versucht:


SendKeys.Send("a");
SendKeys.Send("b");
...
SendKeys.Send("z");

Doch die ausgabe ist nicht 1.a 2.b 3.c... sondern 1. abcdefgh...

kann mir wer helfen?

eine Idee wäre natürlich ein "+1"...

Freundliche Grüsse

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo youngSTAR,

Doch die ausgabe ist nicht 1.a 2.b 3.c... sondern 1. abcdefgh...

mir scheint, man müsste das Spiel kennen, um diese Aussage zu verstehen. Willst du sagen, dass die Eingaben zu schnell hintereinander erfolgen und das Spiel dadurch durcheinander kommt?

herbivore

Gelöschter Account
vor 14 Jahren

Doch die ausgabe ist nicht 1.a 2.b 3.c... sondern 1. abcdefgh...

wie ist denn das gemeint? willst du jedesmal eine 1 2 3 usw mitschicken oder wie meinst du das?

L
770 Beiträge seit 2006
vor 14 Jahren

Von der Beschreibung her hört sich das nach einem ähnlichen "Typing of the Death" an, ein kleines, meiner Meinung nach, lustiges Spiel.

Es ist ein kleiner Egoshooter, wo "Monster" auf einem zulaufen und ein Wort über dem Kopf haben, tippt man das Wort ab, ist das Monster erledigt.

Was es aber mit 1., 2. usw auf sich hat, kann ich wohl nicht sagen.
Du schreibst, die Ausgabe ist nicht die erwünschte.. zeigt den das Spiel irgendeine Art von Reaktion?

Lion

lg Lion

Y
youngSTAR Themenstarter:in
17 Beiträge seit 2009
vor 14 Jahren

also, es ist ein Browserspiel. Man kann ohne Problem das Browserfenster neben einer Anwendung laufen lassen. Ich hab es auch schon versucht, leider erkennt das Spiel immer nur das A! Das Browser-Fenster muss einfach ausgewählt sein, das ist logisch (damit SendyKeys die Werte auch dort hin verschickt!)

mit 1. 2. 3. meinte ich, das es die Buchstaben a - z SEQUENTIELL senden soll, und nicht als EIN STRING.

also zwischen:
a - b - c - d etc soll immer 100ms dazwischen sein oder so!


private void timer1_Tick(object sender, EventArgs e)
        {
                SendKeys.Send("a");
                SendKeys.Send("b");
                SendKeys.Send("c");
        }

--> dies sendet EINEN string von "abc". Ich nehme an das es zu schnell für das Spiel ist, und deshalb erkennt es nur das "a".
wenn ich zwischen den Buchstaben einen Unterbruch bewerkstelligen könnte, könnte es vielleicht funktionieren, aber kA ..

L
770 Beiträge seit 2006
vor 14 Jahren
private void timer1_Tick(object sender, EventArgs e)
        {
                SendKeys.Send("a");
                SendKeys.Send("b");
                SendKeys.Send("c");
        } 

So sendest du aber erst alle 3 Buchstaben, ohne Pause. Ich vermute der Timer soll die Pause darstellen. So musst du im Tick Event einen Buchstaben senden, und erst beim nächten Tick den nächsten, so würdest du deine Pause erhalten.

lg Lion

M
85 Beiträge seit 2009
vor 14 Jahren
private int KeyCounter = 0;
private char[] aryKeysToSend = { 'a', 'b', 'c' };

private void timer1_Tick(object sender, EventArgs e)
{
    if (KeyCounter < aryKeysToSend.Length()) {
        SendKeys.Send(aryKeysToSend(KeyCounter));
        KeyCounter += 1;
    }
}
Y
youngSTAR Themenstarter:in
17 Beiträge seit 2009
vor 14 Jahren

@Lion:
jap hab es bemerkt, hatte danach ein Thread.Sleep(intVal); zwischen jedem SendKeys eingebaut (ich weiss nicht die schönste variante aber ist ja nur so ein "Fun"projekt):))

@m74:
genaaaaaaaau das hab ich gesucht 😃 danke dir
ich weiss zwar nicht ob's dich interessiert, aber ".Length" ist eine Eigenschaft und keine Methode, deshalb ohne () ^^
und das array, wird mit [] indexiert und nicht mit ()
und weil .Send() ein string erwartet, muss das ganze noch zu einem String geparst werden 😃)

achja, und KeyCounter muss wieder auf 0 gesetzt werden, wenn aryKeysToSend.Length erreicht ist.

Danke!!!:)))

L
770 Beiträge seit 2006
vor 14 Jahren

@youngStar,

Genau das habe ich versucht, dir zu sagen, nur ich bin davon ausgegangen, dass du es selbst versucht habe ihr dir nicht das fertige Snippet hin geknallt.

Weiters ist die Array Erstellung von m74 völlig korrekt (ausg. er hätte nachträglich was ausgebessert und ich seh das vorherige Snippet nicht).

Parsen musst du nicht, du könntest doch gleich ein String Array anlegen und dieses verwenden.

Im Prinzip brauchst du auch nur ein int Wert, z.B. OldValue, in dem du speicherst, bei welchem Wert du bist/warst und arbeitest mit einer ASCII Tabelle, den jedes Zeichen stellt ja auch einen dec. Wert da (a = 97). Somit kannst du z.B. die 97 speichern, wenn du diese gesendet hast, erhöhst diese um eins und bist beim "b".

Aber auch hier musst du aufpassen, dass du im gültigen Bereich bleibst 😃
Ist halt die Frage, was wem mehr liegt 😃

lg Lion

M
85 Beiträge seit 2009
vor 14 Jahren

Mag sein, dass mein Codeschnippsel nicht ganz C# konform ist, denn ich habs auf die Schnelle in VB gemacht und nur den Online-Übersetzer bemüht 😉
Ging ja auch nur um die Funktionsweise an sich 😉

Y
youngSTAR Themenstarter:in
17 Beiträge seit 2009
vor 14 Jahren

also es sollte keine Anschuldigung sein oder sonst was, falls es falsch verstanden wurde, tut es mir leid.

da ich kB hab mein Code herinzuposten, wollte ich nur gesagt haben, was da nicht aufgeht, falls ein anderer Anfänger das gleiche Problem hat, und er die Fehler nicht sieht.

danke euch beiden 😃