SendKeys funktioniert nicht überall?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    SendKeys funktioniert nicht überall?

    Hallo leute!

    Ich bin gerade beim programmieren eines kleinen vb.net Tools für den FSX (Flugsimulator). Mit meinem Programm möchte ich einen Tastendruck "simulieren" und dem Simulator übergeben. Dafür kommt die Funktion SendKeys in Frage. Als Test wurden Buchstaben und Wörter über SendKeys an den normalen TextEditor übergeben. Das hat alles einwandfrei funktioniert. Funktioniert auch bei allen anderen Programmen wie Word, dem eigenen Tool usw.

    Jedoch funktioniert der Code nicht beim FSX. Es kommt weder ein Error sonst irgendeine Reaktion, wie als wenn nichst wäre.
    Hier mal ein kleiner Ausschnitt meines Codes:

    VB.NET-Quellcode

    1. AppActivate(7304)
    2. System.Windows.Forms.SendKeys.Send("K")

    ..als ID für AppActivate wurde die ProzessID des Simulators genommen. Das funktioniert auch noch, denn der Simulator wird in den Vordergrund geschalten und somit aktiviert.

    Bin echt planlos und suche den ganzen tag schon nach einer Lösung...
    Desweiteren habe ich noch eine weitere Möglichkeit zum Senden eines tastendrucks gefunden:

    VB.NET-Quellcode

    1. My.Computer.Keyboard.SendKeys("K")

    mit diesem Code funktioniert es wiederum nur bei den besagten Programmen?! Was ist der Unterschied zwischen den 2 Varianten?
    Vieleicht kann mir einer von euch sagen was das Problem sein könnte oder auf was ich achten muss :)

    Gruß
    Philipp

    xxallrounderxx schrieb:

    System.Windows.Forms.SendKeys.Send("K")
    geht an das Fenster, das den Fokus hat.
    Teste mal aus Spaß mit einer Anwendung, die 2 TextBoxen und einen Button hat. Dort solltest Du merken, dass nix passiert, wenn der Button den Fokus hat.
    Genau so ist das mit Deinem Programm.
    Besser wäre es, wenn Du mit API.SendMessage() arbeiten würdest, da kannst Du das Zielfenster explizit angeben.
    Zum exemplarischen Vorgehen gugst Du hier.
    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!