Sendkeys werden vom Spiel nicht erkannt

  • VB.NET
  • .NET (FX) 4.0

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Sendkeys werden vom Spiel nicht erkannt

    Ich schreibe einen kleinen Bot für ein 3D-Spiel das Tastaturanschläge simulieren soll.
    Die Tastaturanschläge werden nicht erkannt, jedoch in jeder anderen Anwendung schon.

    Ich habe Sendkeys.Send und My.Computer.Keyboard.Sendkeys ausprobiert.

    Gibt es andere Möglichkeiten? Bei Skriptsprachen wie AutoIT und AHK funktioniert das.
    UIAutomation
    Da kannst du so ziemlich alles mit machen, ist aber nicht ganz einfach, das zu verstehen.
    Und ob das dein Spiel unterstützt ist auch nicht sicher gewährleistet.
    Manche Spiele gehen da ganz spezielle Wege.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    @panavl22 Willkommen im Forum. :thumbup:
    Das Problem bei SendKeys liegt darin, dass die Tasten an das selektierte Fenster (das mit dem Eingabefokus) gesendet werden.
    Wahrscheinlich ist es sicherer, wenn Du mit API.SendMessage() arbeitest: pinvoke.net/default.aspx/user32.sendmessage
    Oder Du aktivierst das andere Fenster vor SendKeys: pinvoke.net/default.aspx/user32.setactivewindow
    ====
    mycsharp.de/wbb2/thread.php?postid=208842
    Im Forum gibt es diese Lösung, ich weiß aber nicht, ob sie funktioniert, da das VB6-Deklarationen sind:
    Tasten an Minimiertes Fenster senden wie?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich will das hier nicht kapern, aber @petaod: Wie schickst Du per UIAutomation eine Taste, z.B. Enter an ne TextBox?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Enter an ne TextBox
    Das geht vermutlich noch einfach, indem du ein Linefeed oder CrLf einfügst.
    Aber ich verstehe, was du meinst.
    Wenn das Spiel nur tastaturgesteuert ist, und die Anwendung keine UiAutomation-konformen Pattern aufweist, fällt mir auf Anhieb auch nichts ein.
    Den Fall hatte ich noch nicht.

    Aber vielleicht wäre das dann eine Lösung:

    panavl22 schrieb:

    Bei Skriptsprachen wie AutoIT und AHK funktioniert das.
    Man könnte AutoItX.DotNet über nuget laden und diesen Ansatz weiterverfolgen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    Das geht vermutlich noch einfach, indem du ein Linefeed oder CrLf einfügst.
    Leider nicht. Die Kandidaten wie Cr, Lf, CrLf (und als logische Konsequenz Microsoft.VisualBasic.vbCrLf und Environment.NewLine) werden als Zeichen der TextBox hinzugefügt, aber nicht als Entertastendruck angesehen. Damit können also keine TextBoxen auf diesem Weg manipuliert werden, die ein Drücken der Entertaste als Validationssignal verarbeiten. Ich plage mich daher noch mit SendKeys/SendInput ab. Manchmal habe ich Glück, dass ein Button à la [Submit] noch dabei ist :(
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.