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
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
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
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 ..
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
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;
}
}
@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!!!:)))
@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
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 😉
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 😃