如题,我现在有一个程序需要获取另一个程序窗体上的文本框及按钮事件。 
     现在的问题是我能获取到另外一个窗体的句柄,却怎么也获取不到窗体上的文本框和Button按钮的句柄。
  
 请各位大哥大姐帮帮忙,小弟感激不尽!!!以下是我的代码: [DllImport("User32.dll", EntryPoint = "FindWindow")]
    private static extern IntPtr FindWindow(string lpClassName,string lpWindowName);    [DllImport("user32.dll", EntryPoint = "FindWindowEx",SetLastError = true)]
    private static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter, string lpszClass, string lpszWindow);    [DllImport("User32.dll", EntryPoint = "SendMessage")]
    private static extern int SendMessage(IntPtr hWnd,int Msg, IntPtr wParam, string lParam);    const int WM_GETTEXT = 0x000D;
    const int WM_SETTEXT = 0x000C;
    const int WM_CLICK = 0x00F5;    public Form1()
    {
      InitializeComponent();
    }    private void button1_Click(object sender, EventArgs e)
    {        int retval = 0; //增加一个返回值用来判断操作是否成功
        //string lpszParentClass = "#32770"; //整个窗口的类名
        string lpszParentWindow = "Form1"; //窗口标题
        string lpszClass = "WindowsForms10.EDIT.app.0.b7ab7b"; //需要查找的子窗口的类名,也就是输入框
        //string lpszClass = "Edit";
        string lpszClass_Submit = "WindowsForms10.BUTTON.app.0.b7ab7b"; //需要查找的Button的类名
        //string lpszClass_Submit = "Button";
        string lpszName_Submit = "确定"; //需要查找的Button的标题
        string text = "";        IntPtr ParenthWnd = new IntPtr(0);
        IntPtr EdithWnd = new IntPtr(0);        //查到窗体,得到整个窗体
        ParenthWnd = FindWindow(null, lpszParentWindow);        //判断这个窗体是否有效
        if (!ParenthWnd.Equals(IntPtr.Zero))
        {
          //得到Form1这个子窗体的文本框,并设置其内容
          EdithWnd = FindWindowEx(ParenthWnd, EdithWnd, lpszClass, "");   这里获取到的EdithWnd始终为0;
         
          if (!EdithWnd.Equals(IntPtr.Zero))
          {
            text = "test1";
            //调用SendMessage方法设置其内容
            SendMessage(EdithWnd, WM_SETTEXT, IntPtr.Zero, text);
            retval++;
          }
         
          //得到Button这个子窗体,并触发它的Click事件
          EdithWnd = FindWindowEx(ParenthWnd,
          (IntPtr)0, lpszClass_Submit, lpszName_Submit);
          if (!EdithWnd.Equals(IntPtr.Zero))
          {
            SendMessage(EdithWnd, WM_CLICK, (IntPtr)0, "0");
            retval++;
          }
        }
    }
注:  另一个窗体Form1 里 只有 一个TextBox 和一个Button

解决方案 »

  1.   

    EdithWnd = FindWindowEx(ParenthWnd, EdithWnd, lpszClass, null);   null和""是有区别的,两者并不相等。
    另外将SendMessage改为PostMessage
      

  2.   

    请问: 如果我想获取另一个程序中的TextBox中的数据以及捕获它的按钮的事件该用什么函数或者应该怎么做??
      

  3.   

       if (!ParenthWnd.Equals(IntPtr.Zero))
     中间的内容要遍历所有的子控件  然后根据控件的位置去判断是那个控件如果对方的程序存在panel之类的你是拿不到句柄的  
      

  4.   


    请问: 我想捕获另一个程序的BUTTON按钮的事件,应该怎么做?谢谢。。