À l'aide de PostMessage/SendMessage pour envoyer les clés de c# IE WebBrowser

Je suis en train de remplissage automatique à valeurs dans C# contrôle webbrowser et tab et entrée et appuyez sur haut et bas pour vous déplacer dans les champs.

Voici mon PInvoke et fonctions wrapper. J'ai utilisé Spy++ pour obtenir ces dans Internet Explorer. Personne ne vois rien de mal avec mon définitions? Je veux utiliser pour Envoyer et afficher de message au lieu de SendInput parce que je ne veux pas avoir de focus de la fenêtre...

    [DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
const uint WM_KEYDOWN = 0x0100;
const uint WM_KEYUP = 0x0101;
const uint WM_CHAR = 0x0102;
const int VK_TAB = 0x09;
const int VK_ENTER = 0x0D;
const int VK_UP = 0x26;
const int VK_DOWN = 0x28;
const int VK_RIGHT = 0x27;
//According to SPY++ in IE
//ENTER key is
//P KEYDOWN
//P CHAR
//S CHAR
//P KEY_UP
//TAB key is
//P KEYDOWN
//P KEYUP
//DOWN, UP, RIGHT, LEFT is
//P KEYDOWN
//S KEYDOWN
//P KEYUP
//Letters is
//P KEYDOWN
//S KEYDOWN
//P CHAR
//S CHAR
//P KEYUP
private void SendEnter()
{
PostMessage(this.Handle, WM_KEYDOWN, (IntPtr)VK_ENTER, IntPtr.Zero);
PostMessage(this.Handle, WM_CHAR, (IntPtr)VK_ENTER, IntPtr.Zero);
SendMessage(this.Handle, WM_CHAR, (IntPtr)VK_ENTER, IntPtr.Zero);
PostMessage(this.Handle, WM_KEYUP, (IntPtr)VK_ENTER, IntPtr.Zero);
}
private void SendTab()
{
PostMessage(this.Handle, WM_KEYDOWN, (IntPtr)VK_TAB, IntPtr.Zero);
PostMessage(this.Handle, WM_KEYUP, (IntPtr)VK_TAB, IntPtr.Zero);
}
private void SendArrowKey(int key)
{
PostMessage(this.Handle, WM_KEYDOWN, (IntPtr)key, IntPtr.Zero);
SendMessage(this.Handle, WM_KEYDOWN, (IntPtr)key, IntPtr.Zero);
PostMessage(this.Handle, WM_KEYUP, (IntPtr)key, IntPtr.Zero);
}
private void SendChar(int key)
{
//Keydown wParam values are 0x020 less than WM_CHAR wParam
PostMessage(this.Handle, WM_KEYDOWN, (IntPtr)(key - 0x020), IntPtr.Zero);
SendMessage(this.Handle, WM_KEYDOWN, (IntPtr)(key - 0x020), IntPtr.Zero);
PostMessage(this.Handle, WM_CHAR, (IntPtr)key, IntPtr.Zero);
SendMessage(this.Handle, WM_CHAR, (IntPtr)key, IntPtr.Zero);
PostMessage(this.Handle, WM_KEYUP, (IntPtr)(key - 0x020), IntPtr.Zero);
}
Une raison particulière de ne pas définir les valeurs des champs directement depuis vous semblent déjà être en utilisant WebBrowser?
Oui parce que la page ne permet pas de raison de la façon dont le javascript qui est écrit sur la page.

OriginalL'auteur kyleb | 2012-07-06