title: Getting a Button handle from another application
body: <p>I have a program that needs to send the BM_CLICK message to another applications button.
  I can get the parent window handle but when I try to get the button handle if always returns 0</p>
  
  <p>I got the button caption name and button type from Spy++ it seems right but I know I must have gotten something wrong. below is my code</p>
  
  <pre><code> public const Int BM_CLICK = 0x00F5;
  
   [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
          private static extern IntPtr SendMessage(IntPtr hwnd, uint Msg, IntPtr wParam, IntPtr lParam);
  
          [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
          static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
  
  
  
  private void button1_Click(object sender, EventArgs e)
  {
      Process[] processes = Process.GetProcessesByName("QSXer");
  
      foreach (Process p in processes)
      {
          ////the Button's Caption is "Send" and it is a "Button".  
          IntPtr ButtonHandle = FindWindowEx(p.MainWindowHandle, IntPtr.Zero, "Button", "Send");
         //ButtonHandle is always zero thats where I think the problem is 
      SendMessage(ButtonHandle, BM_CLICK, IntPtr.Zero, IntPtr.Zero);
  
      }
  
  }
  </code></pre>
  
  <p>Spy screen shot</p>
  
  <p><img src="https://i.stack.imgur.com/ctDOQ.jpg" alt="alt text"></p>