Функция SendKeys не работает должным образом в определенном окне

#c# #winforms #sendkeys

#c# #winforms #sendkeys

Вопрос:

Я пытаюсь создать простое автоматическое нажатие клавиш. Она отлично работает в блокноте и т. Д., Но Не работает в окне игры.

У вас есть какие-либо идеи?

 namespace PoyBot
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.TopMost = true;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Start();
            //timer2.Start();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            //timer2.Stop();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
            {
                SendKeys.SendWait("z7");
            }
            else if (checkBox2.Checked)
            {
                SendKeys.Send("z8");
            }
        }

        private void timer2_Tick(object sender, EventArgs e)
        {
            if (checkBox3.Checked)
            {
                SendKeys.Send("0");
            }
        }
    }
}
  

Комментарии:

1. Игры очень часто используют raw input api для ввода с клавиатуры. Простой способ остановить обман.

2. Программное обеспечение Logitech gaming работает в этой игре, я набираю «Z» и «1», и оно регистрируется в игре. Я просто пытаюсь имитировать то, что делает программное обеспечение logitech

3. Что ничего не меняет в заявлении Ганса.

4. Если программное обеспечение logitech gaming может копировать фактические нажатия клавиш, то это означает, что это выполнимо, нет? Это было то, что я пытался сделать

Ответ №1:

‘nameOfYourWindow’ вы можете найти применение spyxx.exe или с

 [DllImport("user32.dll")]
internal static extern IntPtr GetForegroundWindow();
  

После того, как вы сможете найти hwnd вашего окна и нажать кнопку отправки

 IntPtr hWND = FindWindow(null, nameOfYourWindow);

PostMessage(hWND, 0x0100, (int)Keys.Tab, 0);
Thread.Sleep(30);
PostMessage(hWND, 0x0101, (int)Keys.Tab, 0);