Вы не можете использовать SendKeys, потому что он посылает свой вклад в данный момент окна:
Поскольку нет управляемого способа для активации другого приложения, , вы можете использовать этот класс в текущем приложении или использовать собственные методы Windows, такие как FindWindow и SetForegroundWindow, до сфокусировать внимание на других приложениях.
Но вы можете использовать WinAPI SendMessage
функцию, как это описано более подробно here.
Принимая во внимание, что вы знаете Form
, что текстовое поле содержится, вы можете получить его дескриптор с помощью Control.Handle property, так что это будет выглядеть следующим образом:
public static class WinApi
{
public static class KeyBoard
{
public enum VirtualKey
{
VK_LBUTTON = 0x01,
...
VK_RETURN = 0x0D
}
}
public static class Message
{
public enum MessageType : int
{
WM_KEYDOWN = 0x0100
}
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SendMessage(IntPtr hWnd, MessageType Msg, IntPtr wParam, IntPtr lParam);
}
}
private void timer2_Tick(object sender, EventArgs e)
{
WinApi.Message.SendMessage(
hWnd: this.textBox.Handle, // Assuming that this handler is inside the same Form.
Msg: WinApi.Message.MessageType.WM_KEYDOWN,
wParam: new IntPtr((Int32)WinApi.KeyBoard.VirtualKey.VK_RETURN),
lParam: new IntPtr(1)); // Repeat once, but be careful - actual value is a more complex struct - https://msdn.microsoft.com/en-us/library/ms646280(VS.85).aspx
}
PS: Вы также можете быть заинтересованы в PostMessage
function ,
PS1: Хотя это решение должно работать, я бы хотел указать, что в идеале вы не должны использовать такие механизмы, чтобы что-то делать в своем собственном приложении - отправка ключей не всегда надежна и может быть трудно проверить , И обычно есть способ добиться желаемого результата, не прибегая к таким подходам.
Вы не можете использовать SendKeys() для таргетинга на минимизированную форму. SendKeys() работает только с приложением, которое в настоящее время ** активно ** и имеет ** фокус ** (открыто на экране перед пользователем). Для минимизированного приложения вам нужно будет получить прямой ** handle ** в свой целевой TextBox (возможно, с помощью FindWindow()/EnumWindows()), а затем использовать SendMessage()/PostMessage(), чтобы отправить его нажатием клавиш. –
[Отправка данных в блокнот] (http://stackoverflow.com/a/39706017/3110834) –
Вы можете активировать окно и SendKeys перед деактивацией: http://stackoverflow.com/questions/41215435/event-that-triggers -До-моя форма-теряет фокус- –