Necesito ayuda con PostMessage

25/05/2007 - 10:15 por Jowie | Informe spam
Hola,
¿Alguien me puede decir que parametros le tengo que pasar a
postMessage para que envie un texto a otra aplicación?, muchas gracias.

Preguntas similare

Leer las respuestas

#6 Jowie
25/05/2007 - 13:02 | Informe spam
¿Has probado a usar el SendWait() en lugar del Send(), a ver si funciona
mejor esperando a que la aplicación procese las teclas antes de volverle a
enviar más?



Lo acabo de probar y funciona igual (mal), vaya faena.

En teoría SendKeys funciona igual que si
estuvieras realizando las pulsaciones de tecla desde el teclado, así que
cualquier cosa que puedas teclear debería funcionar también vía SendKeys.



Parece ser que es en teoria porque utilizando el teclado funciona
bien, y utilizando el teclado en pantalla que he hecho con sendkeys
funciona mal.

Gracias de todas formas por vuestras aportaciones e ideas.
Respuesta Responder a este mensaje
#7 Jowie
28/05/2007 - 09:08 | Informe spam
Al final he encontrado el problema, lo comento por si interesa.

El problema era que la tecla la envio desde un teclado virtual
(teclado en pantalla) entonces cada vez que envio una tecla tengo que
activar el formulario lo cual hacia que se me seleccionara el texto
del combo y al presionar otra tecla la sobreescribiera. La solucion ha
sido programar en el evento keyPress lo siguiente:

private void cboLista_KeyPress(object sender, KeyPressEventArgs e)
{
this.cboLista.SelectionLength = 0;
this.cboLista.SelectionStart = this.cboLista.Text.Length;
}

Lo que hace es deselccionar el texto, tiene sus pros y sus contras
pero es una solución.
Respuesta Responder a este mensaje
#8 RFOG
28/05/2007 - 10:26 | Informe spam
En Mon, 28 May 2007 09:08:01 +0200, Jowie
escribió:

Al final he encontrado el problema, lo comento por si interesa.

El problema era que la tecla la envio desde un teclado virtual
(teclado en pantalla) entonces cada vez que envio una tecla tengo que
activar el formulario lo cual hacia que se me seleccionara el texto
del combo y al presionar otra tecla la sobreescribiera. La solucion ha
sido programar en el evento keyPress lo siguiente:

private void cboLista_KeyPress(object sender, KeyPressEventArgs e)
{
this.cboLista.SelectionLength = 0;
this.cboLista.SelectionStart = this.cboLista.Text.Length;
}

Lo que hace es deselccionar el texto, tiene sus pros y sus contras
pero es una solución.




Tienes una opción mejor que es hacerlo mediante el método SendMessage de
Win32, en ese caso no tendrás problemas con el foco ni con nada (ni
siquiera es necesario que la aplicación destino esté activa), pero tienes
que utilizar Interop a partir del Handle de ventana destino y la tecla
pulsada.

http://msdn2.microsoft.com/en-us/li...46276.aspx
http://msdn2.microsoft.com/en-us/li...44950.aspx

Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación
Es muy dulce ver llegar la muerte mecido por las plegarias de un hijo.
Respuesta Responder a este mensaje
#9 Jowie
28/05/2007 - 11:54 | Informe spam
Tienes una opción mejor que es hacerlo mediante el método SendMessage de
Win32, en ese caso no tendrás problemas con el foco ni con nada (ni
siquiera es necesario que la aplicación destino esté activa), pero tienes
que utilizar Interop a partir del Handle de ventana destino y la tecla
pulsada.



Se que te va a parecer una tonteria, pero te importaria madarme un
ejemplo con los parametros que hay que pasarle a dicha funcíon porque
sino lo hice asi desde un principio es porque no consigo que funcione.
Gracias por tu interes.

PD.: he mirado los links pero mi nivel de ingles es suficientemente
malo como para saltarme algo.
Respuesta Responder a este mensaje
#10 RFOG
28/05/2007 - 13:46 | Informe spam
En Mon, 28 May 2007 11:54:06 +0200, Jowie
escribió:

Tienes una opción mejor que es hacerlo mediante el método SendMessage de
Win32, en ese caso no tendrás problemas con el foco ni con nada (ni
siquiera es necesario que la aplicación destino esté activa), pero
tienes
que utilizar Interop a partir del Handle de ventana destino y la tecla
pulsada.



Se que te va a parecer una tonteria, pero te importaria madarme un
ejemplo con los parametros que hay que pasarle a dicha funcíon porque
sino lo hice asi desde un principio es porque no consigo que funcione.
Gracias por tu interes.

PD.: he mirado los links pero mi nivel de ingles es suficientemente
malo como para saltarme algo.




Tienes que obtener el HWND Win32 de la ventana destino (creo que Handle de
Windows Forms lo hace, aunque se lo tendrás que pedir a la aplicación de
destino mediante FindWindow, etc).

Luego tienes que obtener el valor numérico de WM_CHAR para ponerlo en msg.

Luego tienes que empaquetar el caracter en wParam como su valor ASCII o
UNICODE

Y posteriormente también los bits de control (el 32 ha de ser 1 para que
así vea que es liberación, no pulsación).

Si SendMessage te devuelve cero es que al menos la aplicación destino ha
aceptado el mensaje. Si no hace nada puede deberse a que estás equivocando
el handle o que simplemente el .NET pasa olímpicamente de todo esto (que
me ha pasado, y mucho, en otras cosas mezclando y filtrando mensajes
nativos).

No te puedo poner código de ejemplo porque nunca lo he hecho desde C#,
aunque sí desde C++ nativo (es lo habitual hacerlo así).

Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación
No tienes lo que mereces, tienes lo que no puedes esquivar.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida