Я использую следующий код на С# для имитации нажатия на клавиатуру:
[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. В Windows 7 и Xp внешнее окно приложения обрабатывается правильно, однако ключи не отправляются. На системах выше Win 7 все правильно. Как мне это исправить?
Редактировать: я проверил это на .NET 4.0 Client Profile и .NET 4.6.1 на 32- и 64-битных машинах, но результаты такие же, как описано выше.