• Aktuell
  • Tags
  • Beliebt
  • Benutzer
  • Gruppen
  • Suche
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

Einfacher Klickbot für Windows

Geplant Angeheftet Gesperrt Verschoben C#
1 Beiträge 1 Kommentatoren 99 Aufrufe
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • Ritzgaundefined Offline
    Ritzgaundefined Offline
    Ritzga
    wrote on zuletzt editiert von
    #1

    Ihr sucht eine einfache Möglichkeit, eine bestimmte Aktion in einem Spiel zu automatisieren ? Dann scheut euch diesen Code an!


    Funktionsweise
    Diese Klasse funktioniert nur auf Windows da hierfür die user32.dll import werden muss, welche auf Linux nicht exisitert. Einfach erklärt benutzt die Klasse die von Windows implementierten Funktionen, welche Interaktionen auf Programme, wie zum Beispiel Mausklicks, zulassen bzw simulieren.

    Ihr könnt die aktuellste Version auf Github finden.


    Quellcode
    Eine funktionierende Version der Klasse:

    class Simulator
        {
            [System.Runtime.InteropServices.DllImport("user32.dll")]
            public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
        
            public const int MOUSE_LEFT_BUTTON = 0x0001;
            public const int MOUSE_LEFT_DOWN = 0x0201;
            public const int MOUSE_LEFT_UP = 0x0202;
        
            public const int MOUSE_RIGHT_BUTTON = 0x0002;
            public const int MOUSE_RIGHT_DOWN = 0x0204;
            public const int MOUSE_RIGHT_UP = 0x0205;
        
            public const int MOUSE_MOVE = 0x0200;
        
            public static bool SendMouseHold(string WindowName, bool useLeft, int x, int y)
            {
                IntPtr hwnd = GetHWND(WindowName);
                int mouse = MOUSE_RIGHT_BUTTON, mouseDown = MOUSE_RIGHT_DOWN;
                if (useLeft)
                {
                    mouse = MOUSE_LEFT_BUTTON;
                    mouseDown = MOUSE_LEFT_DOWN;
                }
                SendMessage(hwnd, MOUSE_MOVE, 0, MakeCordinate(x, y));
                SendMessage(hwnd, mouseDown, mouse, MakeCordinate(x, y));
        
                return false;
            }
        
            public static bool SendMouseClick(string WindowName, bool useLeft, int x, int y, int clickCount)
            {
                IntPtr hwnd = GetHWND(WindowName);
                int mouse = MOUSE_RIGHT_BUTTON, mouseDown = MOUSE_RIGHT_DOWN, mouseUp = MOUSE_RIGHT_UP;
                if (useLeft)
                {
                    mouse = MOUSE_LEFT_BUTTON;
                    mouseDown = MOUSE_LEFT_DOWN;
                    mouseUp = MOUSE_LEFT_UP;
                }
                for(int i = 0; i < clickCount; i++)
                {
                    SendMessage(hwnd, MOUSE_MOVE, 0, MakeCordinate(x, y));
                    SendMessage(hwnd, mouseDown, mouse, MakeCordinate(x, y));
                    SendMessage(hwnd, mouseUp, mouse, MakeCordinate(x, y));
                }
                return false;
            }
        
            public static int MakeCordinate(int LoWord, int HiWord)
            {
                return (HiWord * 0x10000 | LoWord & 0xFFFF);
            }
        
            public static IntPtr GetHWND(string WindowName)
            {
                IntPtr hWnd = IntPtr.Zero;
                foreach (Process pList in Process.GetProcesses())
                {
                    if (pList.MainWindowTitle.Contains(WindowName))
                    {
                        hWnd = pList.MainWindowHandle;
                    }
                }
                return hWnd;
            }
        }
    

    Nachdem ihr die Klasse eingebunden habt könnt ihr nun z.b. folgendes aufrufen:

    Simulator.SendMouseClick("Test", true, 0, 0, 10);
    

    Damit wird 10 mal ein Linksklick auf dem Fenster Test auf den Koordinaten (0,0) simultiert.

    Fals ihr Verbesserungsvorschläge habt, lasst es mich wissen!


    Todo

    • Weitere Tasten einfügen
    • Neue Funktionen hinzufügen (z.b. gedrückt halten und von Position A nach B wandern)
    • Linux-Kompatiblität
    1 Antwort Letzte Antwort
    0

  • Anmelden

  • Login or register to search.
  • Erster Beitrag
    Letzter Beitrag
0
  • Aktuell
  • Tags
  • Beliebt
  • Benutzer
  • Gruppen
  • Suche
  • Anmelden

  • Login or register to search.