mikrocontroller.net

Forum: PC-Programmierung c# problem mit sendkeys


Autor: Kehrenkamp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kehrenkamp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keiner da der mir helfen kann ?

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich sollte das funktionieren...
Das einzige Auffällige ist folgendes
public void TextSenden(string Text) {
    System.IntPtr MainHandle = Process.GetProcessById(ID).MainWindowHandle;
    SendKeys.SendWait("{TAB}");
    SetForegroundWindow(MainHandle);
    Application.DoEvents();
}
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.win...

Autor: Kehrenkamp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.