title: Using PostMessage/SendMessage to send keys to c# IE WebBrowser
body: <p>I am trying to auto fill in values in the C# webbrowser control and tab and enter and press up and down to move through the fields.</p>
  
  <p>Here is my PInvoke and wrapper functions. I used Spy++ to get these in Internet Explorer. Does anyone see anything wrong with my definitions? I want to use Send and Post message instead of SendInput because I don't want to have to focus the window...</p>
  
  <pre><code>    [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);
      }
  </code></pre>