Я использую следующий код в C#, чтобы имитировать нажатие клавиатуры:C# Симуляция клавиатуры нажмите на ОС ниже Windows 8
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);
[DllImport("user32")]
private static extern bool SetForegroundWindow(IntPtr hwnd);
void sim_key(string text, string proc)
{
var process = Process.GetProcessesByName(proc).FirstOrDefault();
if (process != null && process.MainWindowHandle != IntPtr.Zero)
{
SetForegroundWindow(process.MainWindowHandle);
SendKeys.Send(kat_id);
}
}
Я тестировал на Windows Xp, 7, 8.1, 10 и Server 2012. В окнах 7 и Xp внешнее окно приложения обрабатывается правильно, однако ключи не отправляются. В системах выше Win 7 все правильно. Как его исправить?
Редактировать: Я проверил его на .NET 4.0 Client Profile и .NET 4.6.1 на 32- и 64-разрядных машинах, но результаты те же, что описаны выше.
Вы можете попробовать keybd_event вместо SendKeys. – Skynet