Título: [VB.NET] Pegar texto en otra ventana Publicado por: EAX_ en 4 Octubre 2012, 00:55 am Hola comunidad,
He estado investigando sobre este tema en particular hace unos días y no he encontrado lo que necesito. Lo que quiero hacer es que mi programa envíe la instrucción de pegar (CTRL + V) en otra ventana al momento de que yo utilice un atajo de teclado. Estuve buscando eventos que podrían ayudarme y al final me encontré con una función que me permitió bindear una tecla y pude enviar por teclado lo que quería pegar. Código
Enviaba la cadena que quiero pegar con Sendkeys.Send() pero el problema es que si no tengo activa la ventana de mi aplicación la tecla no es procesada por el programa. Confío que alguien me podrá dar una ayudadita Gracias de antemano y saludos Título: Re: [VB.NET] Pegar texto en otra ventana Publicado por: Keyen Night en 4 Octubre 2012, 04:38 am El API SendMenssage, puede enviar pulsaciones de teclas a un handle correspondiente a una ventana especifica, usando los parámetros WM_KEYUP, WM_KEYCHAR y WM_KEYDOWN. Una vez realice una clase para ese propósito está en C# pero es fácilmente traducible a Vb.Net.
Código
Título: Re: [VB.NET] Pegar texto en otra ventana Publicado por: EAX_ en 5 Octubre 2012, 00:57 am Hola, gracias por responder. Tengo una duda. Con esa clase que me das se supone que envías mensajes a una ventana en especifico cierto?
Sabes si hay una forma de que (mientras la ventana no esté activa) siga monitoreando mis teclas y pueda activar un evento? Me gustaría aprovechar el evento OnKeyPress del formulario para lograr enviar algun texto a nivel PC asi como un CTRL + V mientras mi formulario no está activo. Con respecto a la clase, estuve tratando de entenderla y no lo logré. Saludos Título: Re: [VB.NET] Pegar texto en otra ventana Publicado por: Keyen Night en 5 Octubre 2012, 01:49 am Windows comunica muchas cosas a las aplicaciones a través de mensajes, y estos se envían por medio del API SendMessage, esta API es extremadamente dinámica, quiero decir que posee múltiples funcionalidades, para definir que tipo de tarea queremos que SendMessage efectué, existe una lista gigantesca de constantes WM_XXX, que describen situaciones, para este caso tenemos WM_KEYDOWN, WM_KEYUP, WM_CHAR, enviar tecla que se presiona, enviar tecla que se suelta y el Char que se imprime, respectivamente. Una vez definida la constate WM a pasar a SendMessage, entonces enviamos los parámetros para el trabajo que esta a punto de efectuar la función, en el caso de enviar una tecla construí la función SendKey:
Código
El primer parámetro es el Handle (hWnd) de la ventana al cuál se va a enviar el mensaje, el siguiente parámetro es la constante WM, el tercer parámetro es el valor ASCII de la tecla a enviar, el último se omite para este trabajo. SendMenssage, imita en la ventana lo que el usuario hace para presionar una tecla, primero la pulsa (WM_KEYDOWN) luego se imprime (WM_CHAR) y la suelta (WM_KEYUP). Para capturar las teclas que se presionan fuera de tu aplicación tienes las dos opciones más usadas: el API GetAsynKeyState y el Hook de Teclado, que es mucho más limpio y organizado el trabajo. Acerca de esto hay mucha documentación tanto en el foro como en internet en general ;) Título: Re: [VB.NET] Pegar texto en otra ventana Publicado por: EAX_ en 5 Octubre 2012, 03:04 am Agradezco tu respuesta, gracias a eso pude llegar a algo más acercado a mi realidad. Encontré algo interesante que es la función RegisterHotKey, con eso logré definir un atajo de teclado que fuera de la aplicación aun es posible ejecutarlo y, con eso, puedo hacer alguna acción (como enviar el texto que necesito) Ahora el único problema es que me gustaría que el HotKey fuese una sola tecla.
Si alguien sabe por favor responder. Saludos Código
|