如题,我已经实现了C#自动调用外部的EXE程序,通过句柄,也实现了按钮的自动点击。可是,文本框不像按钮那样,可以通过名称找句柄。请问怎样才可以实现外部程序的密码框文本的自动输入呢?望高手指点!

解决方案 »

  1.   

    获取这个窗口的句柄,如果这个密码输入框是焦点,就直接用发送消息给这个窗口。
    System.Windows.Forms.SendKeys.Send( "要发送的键 ")  
      

  2.   

    HWND hWnd = ::FindWindow( "TFormMain ", "Window   name "); //查找目标窗口句柄 
    HWND eWnd = ::FindWindowEx(hWnd,NULL, "TEdit ", " ");     //查找目标窗口的Edit控件句柄 
    ::SendMessage(eWnd,WM_SETTEXT,0,(LPARAM)IP.GetBuffer(IP.GetLength())); //向目标的Edit控件发送文本 
    ::PostMessage(hwnd,WM_KEYDOWN,VK_RETURN,0);//向目标的Edit控件发送回车键消息!
      

  3.   

    根据SPY++中取得的类名(或标题名)及层次关系
    [DllImport("user32.dll", EntryPoint = "FindWindow")]
    private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
    [DllImport("user32.dll")]
    static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);private void button1_Click(object sender, EventArgs e)
    {
      IntPtr hWnd1 = FindWindow(null, "主窗口标题");   
      SetForegroundWindow(hWnd1);
      IntPtr hWnd2 = FindWindowEx(hWnd1, IntPtr.Zero, null, "控件文本");   
      IntPtr hWnd3 = FindWindowEx(hWnd1, IntPtr.Zero, "控件类名", null);   
    }