You can't use SendKeys because it sends input to the currently active window:
Because there is no managed method to activate another application,
you can either use this class within the current application or use
native Windows methods, such as FindWindow and SetForegroundWindow, to
force focus on other applications.
But you can use WinAPI SendMessage
function like it is described in greater details here.
Taking into account that you know the Form
that textbox is contained in, you can get its handle using Control.Handle property, so it will look like:
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
}
P.S.: You may also be interested in PostMessage
function.
P.S.1: Though this solution should work, I'd like to point that ideally you shouldn't use such mechanisms to do something inside your own application - sending keys is not always reliable and can be difficult to test. And usually there is a way to achieve the desired result without resorting to such approaches.