Вы можете использовать вызов через WinAPI keybd_event
Ниже - часть моего VB.NET проекта, на C# я думаю сами переделаете.
Module mdlKbrdEmulate
' Эмуляция нажатий клавиш клавиатуры
' Коды клавиш для эмуляции нажатий
Public Const VK_LBUTTON = &H1 ' Левая кнопка мыши
Public Const VK_RBUTTON = &H2 ' Правая кнопка мыши
Public Const VK_CANCEL = &H3 ' Виртуальная клавиша Отмены, используемая для обработки комбинации клавиш Control-Break
Public Const VK_MBUTTON = &H4 ' Средняя кнопка мыши
Public Const VK_BACK = &H8 ' Backspace
Public Const VK_TAB = &H9 ' Tab
Public Const VK_CLEAR = &HC ' 5 (на цифровой клавиатуре без Num Lock)
Public Const VK_RETURN = &HD ' Enter
Public Const VK_SHIFT = &H10 ' Shift (любая)
Public Const VK_CONTROL = &H11 ' Ctrl (любая)
Public Const VK_MENU = &H12 ' Alt (любая)
Public Const VK_PAUSE = &H13 ' Pause
Public Const VK_CAPITAL = &H14 ' Caps Lock
Public Const VK_ESCAPE = &H1B ' Esc
Public Const VK_SPACE = &H20 ' Spacebar
Public Const VK_PRIOR = &H21 ' Page Up
Public Const VK_NEXT = &H22 ' Page Down
Public Const VK_END = &H23 ' End
Public Const VK_HOME = &H24 ' Home
Public Const VK_LEFT = &H25 ' Стрелка влево
Public Const VK_UP = &H26 ' Стрелка вверх
Public Const VK_RIGHT = &H27 ' Стрелка вправо
Public Const VK_DOWN = &H28 ' Стрелка вниз
' Удалил остальные, т.к. мой ответ становится слишком большим.
Public Const KEYEVENTF_KEYUP = &H2 ' Событие отпускания клавиши
Public Const VK_LSHIFT = &HA0
<DllImport("user32.dll")>
Public Function GetKeyboardLayout(idThread As UInteger) As IntPtr
End Function
<DllImport("user32.dll")>
Public Function VkKeyScanEx(ch As Char, dwhkl As IntPtr) As Short
End Function
<DllImport("user32.dll", CharSet:=CharSet.Auto)>
Public Function MapVirtualKey(uCode As Integer, uMapType As Integer) As Integer
End Function
<DllImport("user32.dll", EntryPoint:="keybd_event", CharSet:=CharSet.Auto, ExactSpelling:=True)>
Public Sub keybd_event(bVk As Keys, bScan As Byte, dwFlags As UInt32, dwExtraInfo As IntPtr)
End Sub
' Эмуляция нажатия клавиши или набор текста
Public Sub SetLetter(sLett As String, fCtrl As Boolean, fShift As Boolean, Optional iInt As Long = 0)
Dim sScan1 As Byte, sScan2 As Byte, i As Integer, keyboardLayout As IntPtr = GetKeyboardLayout(0)
Dim vKey As Short, m_LOWBYTE As Byte, sScan As Byte
If fCtrl Then ' Нажатие Ctrl
sScan1 = CByte(MapVirtualKey(VK_CONTROL, 0))
keybd_event(&H11, sScan1, 0, 0)
Call SleepMe(iInt) ' Заморозка выполнения программы
End If
If fShift Then ' Нажатие Shift
sScan2 = CByte(MapVirtualKey(VK_LSHIFT, 0))
keybd_event(&HA1, sScan2, 0, 0)
Call SleepMe(iInt) ' Заморозка выполнения программы
End If
For i = 1 To Len(sLett) ' Перебираем все символы строки
Application.DoEvents()
If bStop Then GoTo lblEnd ' Прерывание выполнения
vKey = VkKeyScanEx(Mid(sLett, i, 1), keyboardLayout)
m_LOWBYTE = vKey And &HFF ' Get the low byte from the virtual key
sScan = CByte(MapVirtualKey(vKey, 0)) ' Get the scan code of the key.
keybd_event(m_LOWBYTE, sScan, 0, 0) ' Нажатие нужной клавиши
Call SleepMe(iInt) ' Заморозка выполнения программы
keybd_event(m_LOWBYTE, sScan, KEYEVENTF_KEYUP, 0)
Call SleepMe(iInt) ' Заморозка выполнения программы
Next
lblEnd:
If fShift Then keybd_event(&HA1, sScan2, KEYEVENTF_KEYUP, 0) ' Отжатие Shift
If fCtrl Then keybd_event(&H11, sScan1, KEYEVENTF_KEYUP, 0) ' Отжатие Ctrl
Call SleepMe(iInt) ' Заморозка выполнения программы
End Sub
' Эмуляция нажатия спецклавиш
Public Sub SetLetterEx(vKey As Short, fCtrl As Boolean, fShift As Boolean, Optional iInt As Long = 0)
Dim sScan1 As Byte, sScan2 As Byte
Dim keyboardLayout As IntPtr = GetKeyboardLayout(0)
Dim m_LOWBYTE As Byte = vKey And &HFF ' Get the low byte from the virtual key
Dim sScan As Byte = CByte(MapVirtualKey(vKey, 0)) ' Get the scan code of the key.
If fCtrl Then ' Нажатие Ctrl
sScan1 = CByte(MapVirtualKey(VK_CONTROL, 0))
keybd_event(&H11, sScan1, 0, 0)
Call SleepMe(iInt) ' Заморозка выполнения программы
End If
If fShift Then ' Нажатие Shift
sScan2 = CByte(MapVirtualKey(VK_LSHIFT, 0))
keybd_event(&HA1, sScan2, 0, 0)
Call SleepMe(iInt) ' Заморозка выполнения программы
End If
keybd_event(m_LOWBYTE, sScan, 0, 0) ' Нажатие нужной клавиши
Call SleepMe(iInt) ' Заморозка выполнения программы
keybd_event(m_LOWBYTE, sScan, KEYEVENTF_KEYUP, 0)
Call SleepMe(iInt) ' Заморозка выполнения программы
If fShift Then keybd_event(&HA1, sScan2, KEYEVENTF_KEYUP, 0) ' Отжатие Shift
If fCtrl Then keybd_event(&H11, sScan1, KEYEVENTF_KEYUP, 0) ' Отжатие Ctrl
End Sub
End Module