Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   como enviar tecla a windows (https://www.clubdelphi.com/foros/showthread.php?t=32340)

jorgito.crazy 02-06-2006 16:47:28

como enviar tecla a windows
 
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

Cita:

Empezado por jorgito.crazy en un Mensaje Personal
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

Cita:

Empezado por delphi.com.ar
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

Cita:

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

Cita:

Empezado por Win32.hlp
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.

Cita:

Empezado por Win32.hlp
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

Cita:

Empezado por roman
¿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)
Cita:

Empezado por roman
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

Cita:

Empezado por roman
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

esto?
 
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
 
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

Gracias
 
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


La franja horaria es GMT +2. Ahora son las 03:50:30.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi