PDA

Ver la Versión Completa : Enviar teclas de control a Google Earth


vejerf
16-05-2008, 17:47:32
Buenas a todos.
Necesito enviar las teclas de control Ctrl+Alt+T y Ctrl+Alt+B a una aplicación, Google Earth en este caso. He estado buscando algún procedimiento para hacerlo y encontré este hilo (http://www.clubdelphi.com/foros/showthread.php?t=53086&highlight=usar+teclas+de+control+de+otras+aplicaciones)en el foro, pero no logro comprenderlo ni adaptarlo a mis necesidades. Si alguien alguna vez ha usado un método similar a ver si me puede dar alguna pista más de como funciona.
Si alguien pudiera explicarme un poco como funciona le estaría agradecido.
Muchas gracias a todos!!!

cHackAll
16-05-2008, 21:54:08
El hilo que comentas no es el exacto, busca el envio de teclas utilizando keybd_event o por mensaje SendMessage ó PostMessage usando WM_KEYDOWN.

Saludos

vejerf
19-05-2008, 11:14:11
Hola cHackAll... le he echado un vistazo a SendMessage y al PostMessage, pero no logro entender como funciona. Sé que tengo que obtener el handler de la aplicación y lo obtengo, pero no sé como usar WM_KEYDOWN ni que valor usar para obtener la combinación de teclas Ctrl+Alt+otra. Si alguien pudiese explicarme algo más estaría agradecido. Mientras tanto sigo buscando :(...
Gracias

cHackAll
19-05-2008, 15:59:10
Utiliza la busqueda. (http://www.clubdelphi.com/foros/search.php)

Saludos (http://www.clubdelphi.com/foros/showthread.php?t=45145)

vejerf
19-05-2008, 17:57:24
Debo ser bastante torpe cHackAll porque ni con los otros hilos me aclaro. Para empezar no sé como enviar una combinación de teclas porque no me funciona ni mandándolas una a una ni haciendo la suma de las tres. No me funciona ni así:

SendMessage(Aplicacion.GetMainHwnd,WM_LBUTTONDOWN,VK_CONTROL+VK_MENU+Byte('B'),0);
SendMessage(Aplicacion.GetMainHwnd,WM_LBUTTONDOWN,VK_CONTROL+VK_MENU+Byte('B'),0);


Ni así:

SendMessage(Aplicacion.GetMainHwnd,WM_LBUTTONDOWN,VK_CONTROL,0);
SendMessage(Aplicacion.GetMainHwnd,WM_LBUTTONDOWN,VK_MENU,0);
SendMessage(Aplicacion.GetMainHwnd,WM_LBUTTONDOWN,Byte('B'),0);
SendMessage(Aplicacion.GetMainHwnd,WM_LBUTTONUP,VK_CONTROL,0);
SendMessage(Aplicacion.GetMainHwnd,WM_LBUTTONUP,VK_MENU,0);
SendMessage(Aplicacion.GetMainHwnd,WM_LBUTTONUP,Byte('B'),0);


Con Aplicacion.GetMainHwnd obtengo el handler del Google Earth y estoy intentando enviar la pulsación simultánea de las teclas Ctrl+Alt+B, pero no me funciona y ya no encuentro nada más en los hilos del foro.

Si alguien sabe algo más sobre este tema... Gracias!!!

cHackAll
19-05-2008, 18:20:52
Estas usando el mensaje WM_LBUTTONDOWN (para el boton izquierdo del ratón!), en lugar de WM_KEYDOWN (para una tecla), que es el correcto para éste caso.

Tambien te aconsejo revisar el mensaje WM_CHAR.

Saludos

vejerf
19-05-2008, 18:52:56
Explicaré un poco más lo que prentendo hacer. Mi aplicación se basa en el Google Earth y para obtener el mayor control posible sobre esa aplicación quiero ocultar sus opciones y darlas yo desde mi menú. Por ejemplo, GE te da la opción de una barra lateral con la combinación de teclas 'Ctrl+Alt+B' o a través del menú Ver. Mi idea es ocultar ese menú y yo dar en mi Menú Ver la opción de Barra lateral de GE, con lo que yo desencadenaría el mensaje 'Ctrl+Alt+B', pero no habría pulsación de las teclas con lo que yo no las capturaría por así decirlo. Se puede conseguir con el SendMessage lo que yo prentendo???
Gracias otra vez :(

cHackAll
19-05-2008, 22:16:04
Obtienes el handle de la ventana en cuestion con FindWindow y le envias la siguiente secuencia de mensajes;

SendMessage(hWnd, WM_KEYDOWN, VK_CONTROL, 0);
SendMessage(hWnd, WM_KEYDOWN, VK_MENU, 0);
SendMessage(hWnd, WM_CHAR, Byte('B'), 0);
SendMessage(hWnd, WM_KEYUP, VK_MENU, 0);
SendMessage(hWnd, WM_KEYUP, VK_CONTROL, 0);

Saludos

vejerf
20-05-2008, 08:52:27
Pues eso... que sigue sin funcionarme. He usado lo q me dices cHackAll y no me ha funcionado

SendMessage(Aplicacion.GetMainHwnd, WM_KEYDOWN, VK_CONTROL, 0);
SendMessage(Aplicacion.GetMainHwnd, WM_KEYDOWN, VK_MENU, 0);
SendMessage(Aplicacion.GetMainHwnd, WM_CHAR, Byte('B'), 0);
SendMessage(Aplicacion.GetMainHwnd, WM_KEYUP, VK_MENU, 0);
SendMessage(Aplicacion.GetMainHwnd, WM_KEYUP, VK_CONTROL, 0);


Sin embargo antes había usado un mensaje para cerrar la aplicación y sí que funciona:

SendMessage(Aplicacion.GetMainHwnd,WM_CLOSE,0,0);


Alguna idea de por qué puede pasar esto???

Muchas gracias de nuevo...

vejerf
21-05-2008, 08:31:58
Hola amigos,
Lo he intentado de todas las formas posibles, pero no he conseguido poder manejar el Google Earth a mi antojo. No sé si el problema está en la forma de enviar el conjunto de teclas 'Ctrl+Alt+B' porque enviando el mensaje para cerrar la ventana si que funciona. La cosa es que ya estoy algo desesperadillo porque mi jefe espera que eso esté marchando ya.

Si alguien tuviese alguna idea no sabe cuanto le estaría agradecido.

Muchas gracias por su ayuda y su paciencia...