c# problem mit sendkeys

Gast #1241146
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
#1243110
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
Gast #1248861
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren