c# problem mit sendkeys

Gast #1241146
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("User32.dll", SetLastError = true)]
public static extern int SetForegroundWindow(IntPtr hwnd);

int ID;
public void ProzessErstellen(string Programmname)
{
Process P = new Process();
P.StartInfo.FileName = Programmname;
P.Start();
ID = P.Id;
Application.DoEvents();
}

public void TextSenden(string Text)
{

System.IntPtr MainHandle = Process.GetProcessById(ID).MainWindowHandle;
SendKeys.SendWait("{TAB}");
SetForegroundWindow(MainHandle);
Application.DoEvents();
}
private void button1_Click(object sender, EventArgs e)
{
ProzessErstellen("alefclient.exe");
Application.DoEvents();
}

public void button2_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(2000);
for (int i = 0; i <= 20;i++)
{
TextSenden(Text);
System.Threading.Thread.Sleep(1000);
Application.DoEvents();

}

}


}
}


So jetzt zu meinen Problem.
Ich will ihr nen Rollenspiel AFK Bot erstellen.
Aber egal welche Taste ich bei SendKeys rein schreib, im Spiel wird 
immer der ESC befehl ausgeführt.

Mit Button 1 öffne ich mein spiel und Prozess.
Und mit Button2 starte ich meine Tasteneingabe was so weit ja funzt, bis 
auf das, dass immer der ESC Befehl ausgeführt wird.(ALso wie wenn ich im 
spiel ESC drücke dann geh das Menüfenster auf, das passiert bei allen 
Tasten was ich bei sendkeys rein schreib.)

Kann mir da jemand helfen?

MfG
#1243110
Eigentlich sollte das funktionieren...
Das einzige Auffällige ist folgendes
1
public void TextSenden(string Text) {
2
    System.IntPtr MainHandle = Process.GetProcessById(ID).MainWindowHandle;
3
    SendKeys.SendWait("{TAB}");
4
    SetForegroundWindow(MainHandle);
5
    Application.DoEvents();
6
}
Beim ersten Aufruf von TextSenden ist das Zielfenster noch nicht im 
Vordergrund und Application.DoEvents sollte nicht verwendet werden.
U.U. noch die anderen Einstellungen der SendKeys-Klasse in der 
app.config ausprobieren
http://msdn.microsoft.com/de-de/library/system.windows.forms.sendkeys.sendwait.aspx
Gast #1248861
Es funktioniert ja alles soweit.

Bloß wenn mein Programm eine Taste sendet, dann passirt inGame immer das 
gleiche.

Es geht immer das Menü auf egal welche Taste ich senden lasse: 
F3,f,h,u,t,f,tab,strg,alt,usw... . Es ist wie wenn ich im Spiel die ESC 
Taste drücke dann geht auch das Menü auf.

Der Code sieht mittlerweile soaus:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace Arch_Bot
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern int SetForegroundWindow(IntPtr hwnd);


        int ID;

        public void ProzessErstellen(string Programmname)
        {
            Process P = new Process();
            P.StartInfo.FileName = Programmname;
            P.Start();
            ID = P.Id;
        }

        public void TextSenden(string Text)
        {
            System.IntPtr MainHandle = 
Process.GetProcessById(ID).MainWindowHandle;
            SendKeys.SendWait(Text);
            //SetForegroundWindow(MainHandle);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ProzessErstellen("alefclient.exe");
        }


        public void button2_Click(object sender, EventArgs e)
        {
            Timer timer = new Timer();
            timer.Interval = 5000;
            timer.Tick += new EventHandler(timer_Tick);
            timer.Start();



        }

        public void timer_Tick(object sender, EventArgs e)
        {
                for (int i = 0; i <= 5;i++)
                {
                    System.Threading.Thread.Sleep(1000);
                    TextSenden("{g}");

                }

        }

        private void button3_Click(object sender, EventArgs e)
        {

        }

    }
}


Habe noch paar Tipps gekriegt aber da komm ich gar nicht weiter.

Tipp von jemanden; dein fhler dürfte sein das du ans spiel sendest, 
wichtig bei bots ist zu unterscheiden, bots oda cheat enginens, cheat 
engines senden ihre befehle ans spiel, bots sollten nur auf dem pc 
agieren, heißt man erstellt mit einem bot eine selbstagierende maus + 
tastatur, also sollte der bot zugriff auf die tastenkombinationen direkt 
nehmen, dann gibt es noch die intelligenten bots die aktionen ingame 
erkennen dafür solltest du einen socket string aufsetzen der die pakete 
liest und auf die pakete entsprechend reagiert

Hoffe ihr könnt mir helfen.

MFG

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.