#StackBounty: #c# #.net #winapi #input #sendkeys SendKeys with games: with some characters it works, but with some it doesn't

Bounty: 50

I want to simulate input in games with SendKeys, but I have a hard time.

If I use it with i.e. the letter T, while the cursor in Minecraft is in a textbox (in the main menu), it works, the letter T is written in the textbox.

But with {ESC} it doesn’t work. Nothing happens. If I press it manually, it backs to the previous menu. (as it should)

With some applications ESC works:

  • It works with Discord, Sourcetree, Slack, Chrome, CS2D,

  • but for some reason it doesn’t work with Minecraft, Spelunky, Half-Life.

All of the applications mentioned above were in windowed mode.

Another issue:

  • If I send 2 to Minecraft while in a text field, it works correctly, 2 is written.
  • But if I send it while I’m playing, there is no effect. (The character should switch to Item Slot #2)

  • Same with ” ” (whitespace). In text fields it works, but the character won’t jump in the game.

Code:

    [DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
    public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    [DllImport("USER32.DLL")]
    public static extern bool SetForegroundWindow(IntPtr hWnd);

    public Form1()
    {
        InitializeComponent();
        IntPtr minecraftHandle = FindWindow("GLFW30", "Minecraft* 1.15.2");

        if (minecraftHandle == IntPtr.Zero)
        {
            MessageBox.Show("Minecraft is not running.");
            return;
        }

        SetForegroundWindow(minecraftHandle);
        SendKeys.SendWait("{ESC}");
    }

I tried it without focus switching: by assigning the SendKey calls to a hotkey, so the target application can be in focus when the SendKeys are called.

The results are the same :


Get this bounty!!!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.