Пытаюсь отправить нажатие клавиши в игру, но игра игнорируетC#

Место общения программистов C#
Ответить
Anonymous
 Пытаюсь отправить нажатие клавиши в игру, но игра игнорирует

Сообщение Anonymous »

Я знаю, что эта тема довольно часто затрагивалась на этом сайте, и это еще один вопрос, посвященный ей.

Я пытаюсь отправлять нажатия клавиш в определенную игру, и я считаю, что игра игнорирует мои нажатия клавиш. Я знаю, что нашел окно, потому что перед тем, как нажать клавишу, я перевел игру на передний план, и это работает. Я пробовал SendKeys.Send, SendWait и сейчас пробую Windows API через SendMessage, но это тоже не работает. Я использую метод, который нашел у другого пользователя в SO. Вот с чем я работаю:

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;

namespace KeySendTest2
{
class Program
{
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);

public static void SendKeyStroke(IntPtr window, ushort key)
{
const uint WM_KEYDOWN = 0x100;
const uint WM_KEYUP = 0x0101;

SendMessage(window, WM_KEYDOWN, ((IntPtr)key), (IntPtr)0);
SendMessage(window, WM_KEYUP, ((IntPtr)key), (IntPtr)0);
}

static void Main(string[] args)
{
IntPtr hWnd = FindWindow("the class here", null);
SetForegroundWindow(hWnd);
System.Threading.Thread.Sleep(3000);
while (true)
{
SendKeyStroke(hWnd, (ushort)Keys.F3); // Doesn't work
//SendKeys.SendWait(Keys.F3); -- Also doesn't work
}
}
}
}
Игра представляет собой приложение для Windows, которое не является веб-браузером. Есть ли у кого-нибудь идеи, которые могли бы указать мне правильное направление, почему он может игнорировать нажатия клавиш? Я знаю, что это можно сделать, поскольку для игры создано несколько утилит, которые отправляют нажатия клавиш в игру, но они не имеют открытого исходного кода, поэтому у меня нет возможности узнать, какой метод они используют.

Подробнее здесь: https://stackoverflow.com/questions/330 ... s-ignoring
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»