Существует несколько способов сделать это с помощью стандартного элемента управления WebBrowser.
Для HTML: Если вы хотите заполнить текстовое поле, а затем нажать «Отправить», даже не нажимайте клавишу. Сделайте это:
webbrowser1.Navigate("javascript:function%20E(){f0=document.forms[0];f0['login'].value='foo';}E()")
webbrowser1.Navigate("javascript:document.forms[0].submit()")
Это будет намного надежнее, чем пытаться отправить нажатия клавиш для HTML.
** Для Flash: ** Если на веб-странице есть элемент flash, который нужно нажать, он не будет работать. В этом случае SendKeys надежен, но отправляет только активному приложению, поэтому он не будет работать в фоновом режиме. Вы можете отправлять сообщения Windows следующим образом (например, нажмите клавишу «F»):
Dim c as char = "f"c
Dim classname As New System.Text.StringBuilder(100)
Dim ExplorerHandle As IntPtr = webbrowser1.Handle
GetClassNameA(ExplorerHandle, classname, classname.Capacity)
Do While classname.ToString <> "Internet Explorer_Server"
ExplorerHandle = GetWindow(GetExplorerHandle, GetWindow_Cmd.GW_CHILD)
GetClassNameA(ExplorerHandle, classname, classname.Capacity)
Loop
PostMessageA(ExplorerHandle, WM_Constants.WM_KEYDOWN, IntPtr.Zero, IntPtr.Zero)
PostMessageA(ExplorerHandle, WM_Constants.WM_KEYUP, CType(VkKeyScanA(CType(Asc(c), Byte)), IntPtr), IntPtr.Zero)
Вы можете найти определения для PostMessage, GetClassName, GetWindow и т. Д. Онлайн на pinvoke.net. Обратите внимание, что WM_KEYUP использует c, но WM_KEYDOWN отправляет фиктивный ключ (0). KEYDOWN и KEYUP должны идти парами, иначе ключ не будет зарегистрирован, но если вы удерживаете нажатой клавишу Control во время отправки, например, KEYDOWN «p», он активирует функцию печати IE. Для всех букв и цифр вы можете отправить 0 для KEYDOWN и правильное письмо для KEYUP. Backspace, похоже, нужен реальный KEYDOWN, а не 0, но Control-Backspace, похоже, мало что делает в IE, поэтому если c = vbBack, KEYDOWN должен отличаться.
Нажатия клавиш тоже не очень точны, и 1 раз из 500 он пропускает. Но вы можете сделать это с свернутым окном, без проблем и стандартным элементом управления WebBrowser.
Другим вариантом является использование AxWebBrowser. Элемент управления ActiveX, по-видимому, позволяет избежать проблемы Control-P, но манипулировать им не так просто, потому что это не очень хороший элемент управления .Net.