Forum: PC-Programmierung c# problem mit sendkeys


von Kehrenkamp (Gast)


Lesenswert?

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

von Kehrenkamp (Gast)


Lesenswert?

Keiner da der mir helfen kann ?

von Arc N. (arc)


Lesenswert?

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

von Kehrenkamp (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.