PDA

Ver la Versión Completa : como enviar tecla a windows


jorgito.crazy
02-06-2006, 16:47:28
hola, como puedo hacer que al presionar una tecla, o un boton(que al presionarlo se envie una tecla antes definida), la ventana activa, o el control activo, en fin, se envie a window.
por ejemplo, si envio F5 que se atualize la ventana del explorador activa

Gracias

delphi.com.ar
02-06-2006, 16:54:56
El problema es que la ventana activa va a ser la que reciba la tecla o el botón... o sea que sería reenviarse el mensaje a si mismo. Por otro lado si implementas algún mecanismo como un hook, si sigues la cadena de hooks el último que recibirá el mensaje ES la ventana activa.

- Si quieres enviar un WM_KEYDOWN a una ventana, simplemente podrías utilizar SendMessage(WM_KEYDOWN....
- Si quieres saber cuál es la ventana activa, puedes utilizar GetForegroundWindow.

Saludos!

delphi.com.ar
02-06-2006, 21:56:32
Gracias federico, pero por favor trata de entender mi pregunta, no solo necesito enviar la tecla hacia una ventana, tambien a cualquier control activo, lo que quiero que pase en realidad es que si por ejemplo:
estoy en Microsoft Word y esta desplegado el menú Archivo, al enviar la tecla ¨S¨, que se cierre el Word porque es lo que pasaría si presionara en verdad la tecla ¨S¨ en el teclado, por tanto la que hará mi aplicación será simular que se esta usando el teclado, algo muy importante, tal vez digas: pero no puedes enviar nada a un control activo porque al hacer click(por ejemplo) sobre un boton, tu aplicación pasara a ser la ventana activa, y tu boton el control activo.
Pues no pienso usar un boton de mi aplicación, lo que voy a hacer es que por ejemplo cada 10 segundos(timer) se envie la tecla ¨Y¨ a windows. Espero que entiendas, y que te parezca que ahora si me tome el tiempo suficiente para formular mi pregunta.
Muchas gracias Federico y un Saludo
Por lo que leo, quieres que sea como si lo hubiera tipeado el usuario, entonces te recomiendo buscar ayuda sobre la función: keybd_event.

Por otro lado, te recomiendo que las preguntas las hagas en el foro, para que tus dudas sirvan para futuros usuarios.

Saludos!

roman
02-06-2006, 22:08:05
Por otro lado si implementas algún mecanismo como un hook, si sigues la cadena de hooks el último que recibirá el mensaje ES la ventana activa.

¿Se puede hacer esto, seguir la cadena? ¿Cómo?

// Saludos

delphi.com.ar
02-06-2006, 22:13:01
¿Se puede hacer esto, seguir la cadena? ¿Cómo?
Windows maintains a separate hook chain for each type of hook. A hook chain is a list of pointers to special, application-defined callback functions called hook procedures. When a message occurs that is associated with a particular type of hook, Windows passes the message to each hook procedure referenced in the hook chain, one after the other. The action a hook procedure can take depends on the type of hook involved. The hook procedures for some types of hooks can only monitor messages; others can modify messages or stop their progress though the chain, preventing them from reaching the next hook procedure or the destination window.
The CallNextHookEx function passes the hook information to the next hook procedure in the current hook chain.
Ni mu!.... :D

roman
02-06-2006, 22:19:17
¿Qué se supone que entienda con lo que citas? ¿Que sí se puede y se desprende de lo ahí dicho? Porque yo sólo veo que puedo ser eslabón de la cadena pero no cómo seguirla.

Unos mugidos más por favor :p

// Saludos

delphi.com.ar
02-06-2006, 22:28:46
¿Qué se supone que entienda con lo que citas? ¿Que sí se puede y se desprende de lo ahí dicho? Porque yo sólo veo que puedo ser eslabón de la cadena pero no cómo seguirla.
CallNextHookEx!! (Segundo mujido del mensaje anterior :p)
Calling CallNextHookEx is optional. A hook procedure can call this function either before or after processing the hook information. If a hook procedure does not call CallNextHookEx, Windows does not call the hook procedures installed before the current hook procedure was installed.
¿Lo tengo que traducir?.... Simplemente el llamado de CallNextHookEx es opcional, puedes llamarlo antes o después de procesar la información del hook. Si el procedimiento del Hook no llama a CallNextHookEx, Windows no llamará los hooks instalados antes de que nuestro hook haya sido instalado.

Saludos!

roman
02-06-2006, 22:34:25
Perdón, ¡qué mugidos! ¡Me han dolido los oídos! Lo que pasa es que al leer:

si sigues la cadena de hooks

yo entendí seguir en el sentido de recorrer y veo que tú lo usas en el sentido de no interrumpir.

// Saludos

delphi.com.ar
02-06-2006, 22:55:06
yo entendí seguir en el sentido de recorrer y veo que tú lo usas en el sentido de no interrumpir
Ahora te responde en Mexicano: "Así pos si!" :D
Yo me refería a no interrumpir la cadena. Si no deduzco mas pensaste, culpa de mi mala forma de expresarme, que se podría leer la cadena de hooks y ver el puntero del WndProc al final de la cadena... ¿Estoy en lo cierto?... Mil disculpas!

PD: Mu!

roman
02-06-2006, 22:59:13
Pos si! Lo del CallNextHook ya lo sabía. Hasta eso que sí leo la ayuda de vez en vez. :p :D

// Muuuuuu

jorgito.crazy
06-06-2006, 13:40:08
Ahora si, gracias federico, si puedes darme una mano con esto:

keybd_event('8',0,0...

Esto envia BackSpace.

Como más puedo mandar, por ejemplo, como mando TAB.

Gracias, un saludo.

Acanol
08-06-2006, 12:16:57
No se si es esto lo que necesitas...

keybd_event(9,0,0,0); // TAB presionado
keybd_event(9,0,2,0); // Soltar el Tab

Saludos.

jorgito.crazy
08-06-2006, 13:50:09
SI, esto me sirve, pero no hay algna documentación o cualquier cosa que tenga todos los números asociados a cada tecla del teclado(si todas son números), Yo hasta ahora conosco solo unos cuantos:

13 ENTER
8 BACKSPACE
.
.
.
:rolleyes: :rolleyes: :rolleyes: :rolleyes:

Sick boy
08-06-2006, 14:08:55
Supongo que la documentacion que necesitas es el CODIGO ASCII

Una simple busqueda en el google te lleva a esto www.asciitable.com/

Saludos

jorgito.crazy
08-06-2006, 14:37:09
Ya tengo todo lo que necesito, Muchas gracias Federico y Sick boy.
No se ustedes que creen, pero Argentina será el ganador de este mudial.
Un Saludo:D