Hola, pues es muy facil solo identificas el control textbox con la api FindWindowEx y despues le pasas el texto con la api SendMessageSTRING y con la constante WM_SETTEXT...
saludos.
| ||||
Respuesta: Visual Basic 2005: Usar SendMessage. Hola seba123neo gracias por tu respuesta. Mira hice algo así: Código PHP: Me guié de un código que creo tu pusiste en esta dirección: http://www.canalvisualbasic.net/foru....asp?TID=34737 A ver si ando equivocado en algo o que puede ser? |
| ||||
Respuesta: Visual Basic 2005: Usar SendMessage. bueno pero si copiaste y pegaste el ejemplo asi como esta en .NET no te va a andar, porque las api's tienen diferentes tipos de datos en visual basic 6 que en .NET...son diferentes...haber lo explico lo mas facil posible... voy a hacer un ejemplo de como mandar un texto de un textbox de tu aplicacion al textbox de una aplicacion externa, en este caso el Notepad de windows...yo lo explico ..si ya lo sabes no importa seguro a alguien le va a servir.. como sabras podes usar el SPY++ para averiguar los nombres de clase de los controles... este es el nombre de clase de la ventana padre llamada "Notepad": ![]() este es el nombre del control dentro de la ventana llamado "Edit": ![]() para saber los datos de la ventana tenes que arrastrar el "iconito" sobre una ventana y te va diciendo las partes que la forman,en este caso fijate que esta seleccionado el area de escritura del bloc de notas y al lado en la ventana estan los datos... el handle es el numero(Long) que le asigna windows a cada ventana ,es como si fuera el numero que identifica esa ventana,sabiendo eso,podes hacer un monton de cosas,cerrarla,moverla,resizarla,cambiar valores,etc.... el Class es el nombre de clase del control,o sea cada control tiene su nombre...ese ese es que nos interesa ahora.. ahora fijate con este codigo como escribo en el bloc de notas..usando unas funciones api's...
Código:
lo unico que tenes que hacer ahora es adaptar eso a tu programa...Public Class Form1 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer Private Declare Function SendMessageSTRING Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer Private Declare Function SendMessageLONG Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer Private Const WM_SETTEXT = &HC Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Shell("notepad.exe", vbNormalNoFocus) Dim a As Long Dim b As Long a = FindWindow("Notepad", vbNullString) b = FindWindowEx(a, 0&, "Edit", vbNullString) SendMessageSTRING(b, WM_SETTEXT, 256, "Holaaaaaaaaaaaa") End Sub End Class saludos.
__________________ " Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein |
| ||||
Respuesta: Visual Basic 2005: Usar SendMessage. Muchas gracias me funcionó la adaptación que hice de ese código a mis necesidades ![]() Solamente un asunto: a = FindWindow("Notepad", vbNullString) En mi caso, el nombre de clase cambia cada vez que hay una ejecución, como el hWnd, entonces opté por colocar otros datos y quedará así: a = FindWindow(vbNullString, "Nombre de la ventana") En mi caso, el nombre de la ventana siempre es el mismo no cambia así que me funciona correctamente. También tengo el Spy++ muchas gracias igual por explicarlo siempre es bueno aprender de los que saben. ![]() |
| ||||
Respuesta: Visual Basic 2005: Usar SendMessage. Hablando nuevamente sobre este tema me surgio algo inesperado: En principio ocupaba que un texto de un textbox en mi programa se copie y pegue en un campo de texto en otra ventana, sea web, sea otra aplicacion, sea notepad, etc. Código PHP: ![]() Todo lo hace bien, lo que pasa es que lo copia en el cuadro de abajo y ocupo que se copie en el cuadro de arriba, ambos tienen nombre de clase "Edit", lo que cambia es su hWnd cada vez que se abre esa ventana, pero como le puedo decir al programa que copie el texto en el cuadro que necesito? Gracias! |
| ||||
![]() Si te fijas la función FindWindowEx recibe en el segundo parámetro un hWnd, lo que debes hacer es obtener el hWnd del primer Edit, y luego pasarle como parámetro ese mismo hWnd, con lo que obtendrás el hWnd del segundo Edit. Por ejemplo:
Código vb:
Ver original
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. Última edición por David; 16/09/2008 a las 08:47 |
| ||||
Respuesta: Visual Basic 2005: Usar SendMessage. Excelente David. Precisamente estaba investigando sobre el hWnd hijo (hWndChildAfterA), ya que su orden es de su ventana hija inmediata, por eso tomo ese cuadro de primero. Pero pensaba que ese hWnd es como un orden de menor a mayor, de cero en adelante, estuve probando poner un uno pero como sabes no me corrio bien. Gracias David muy amable de tu parte. |
| ||||
Respuesta: Visual Basic 2005: Usar SendMessage. Disculpen las molestias de este tema tan largo, creo tener la última duda: Tengo este codigo en un boton Código PHP: PD: Tambien me abria muchas ventanas cada vez que cliqueaba el botón, pero ya arreglé eso. Gracias! |
| ||||
Respuesta: Visual Basic 2005: Usar SendMessage. Lo más probable es que esté copiando pero no muestra porque no actualiza la ventana ![]()
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
Respuesta: Visual Basic 2005: Usar SendMessage. Interesante este WM_Paint, me sirvio de lujo como tus aportes David, gracias de verdad, por un momento pense en poner doble WM_SETTEXT o tal vez un While pensando que el codigo no tomaba aun el hWnd, varias maneras pero pues como no conozco aun varios de los WM mi desconocimiento es muy notable. Código PHP: |