2010-12-27 15 views
8

¿Cómo uso C# o C++ el texto en el cuadro de texto de otra aplicación? Lo hice hace mucho tiempo y parecía recordar algo sobre el uso de las aplicaciones HWND. Pero desde ese cambio para cada instancia de la aplicación siento que no recuerdo la historia completa. ¿De alguna manera obtengo una lista de aplicaciones en ejecución, extraigo la que quiero, obtengo el HWND de eso y luego ... hmm ... entonces qué? :)Insertar texto en el cuadro de texto de otra aplicación

Respuesta

11

Uso FindWindowEx() para encontrar la manija (HWND) y luego enviar el mensaje usando WM_SETTEXTSendMessage()

Al usar FindWindowEx, primero deberá encontrar el identificador de la ventana principal utilizando su nombre de clase. Luego necesitará encontrar el identificador de cualquier contenedor en el que esté el cuadro de texto, llamando a FindWindowEx, pasando el identificador del padre (la ventana) y el nombre de clase del contenedor. Tendrá que repetir esto hasta que llegue al cuadro de texto. Puede usar una herramienta llamada Spy++ que está instalada de manera predeterminada con Visual Studio para inspeccionar la aplicación de destino y descubrir la jerarquía de contenedores (todos los objetos son realmente llamados ventanas en la API, pero los llamo contenedores en contraste con la parte superior ventana de nivel) con sus nombres de clase.

+0

Además, puede que tenga que añadir una llamada a InvalidateRect como SendMessage lo cambiaría y me gustaría ver el valor de Winspector pero el valor en mi formulario se mantuvo igual , por lo que InvalidateRect causará el repintado –

+0

¿Qué pasa si, la aplicación contiene más de un cuadro de texto y quiero leer los datos de un cuadro de texto específico. ¿Hay alguna manera de distinguir el controlador de cuadros de texto? – MK446

3

Entonces SendMessage(), WM_SETTEXT

-1

puede utilizar la clase portapapeles para lograr el mismo

+0

pero esto implicará usuario el manejo en lugar de la ejecución de código – RvdK

-2

En lugar de orientar una aplicación específica, puede enviar las teclas al campo de texto.

private void button1_Click(object sender, EventArgs e) 
    { 
     System.Threading.Thread.Sleep(5000); 
     SendKeys.Send(send_text); 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     send_text = textBox1.Text;    
    } 
+0

Agregue algunas explicaciones también – CodeWarrior

Cuestiones relacionadas