Я пытаюсь отправлять нажатия клавиш в определенную игру, и я считаю, что игра игнорирует мои нажатия клавиш. Я знаю, что нашел окно, потому что перед тем, как нажать клавишу, я перевел игру на передний план, и это работает. Я пробовал 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
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/330 ... s-ignoring
Мобильная версия