Simular Teclas
Hola,
Quisiera saber como simularle a la ventana de una applicacion que estoy presionando teclas he probado con varios componentes pero no tuve suerte. gracias de antemano |
Hola:
Mira si lo que quieres es enviar cualquier tecla, o en concreto, teclas alfanuméricas (caracteres). El siguiente código te puede servir: Código:
//Codigo se toma de la lista de constantes del tipo VK_XXX en windows.pas |
Una manera muy sencilla es la función
keybd_event(Código_tecla_virtual,0,0,0); si quieres que la tecla se emule en otro componente Componente_Destino.setfocus; keybd_event(Código_tecla,0,0,0); Application.ProcessMessages; //si fuera necesario canviar el foco CompenteOrigen.SetFocus; //si fuera necesario canviar el foco |
Aunque veo que ya te han asesorado muy bien, te recomiendo este hilo http://www.clubdelphi.com/foros/arch...ic.php?t=20320
Saludos! |
Como hago para simularle las teclas a una sub-ventana de otra applicacion(No hecha por mi en delphi) ((EXTERNA))
Ninguna de las formas que leí me funcionó |
Todas las formas te tienen que funcionar, lo que tienes que cambiar es el Handle de la ventana a la que le envíes el mensaje... Para buscar la ventana te recomiendo leer este hilo http://www.clubdelphi.com/foros/arch...ght=findwindow
Saludos! |
Hola DML,
estoy intentando hacer eso mismo, es decir, enviar el mensaje que se presiono una tecla a una aplicacion externa, en mi caso particular es a la aplicacion activa. MI aplicacion delphi no se activa, esta en segundo plano. ¿Pudiste resolverlo?, ¿como? Desde ya muchas gracias!!!!!! Andy |
¿Ya intentaste con keybd_event? ¿Qué problemas te dio?
// Saludos |
Si, probe con keydb_event, y no me funciono intentando escribir en la aplicacion externa, pues estoy perdiendo el foco de la misma, no quedandome ninguna aplicacion activa.
Lo que quiero hacer es enviar un mensaje de que se presiono una tecla a la aplicacion activa actualmente. Mi aplicacion no toma foco. Basicamente mi aplicacion es un form, con un speedbutton: //esto es para que al ejecutar la aplicacion no se active procedure TForm1.CMShowingChanged(var Message: TMessage); begin if Showing then ShowWindow(Handle, SW_SHOWNA) else inherited; end; //para que al clickear sobre el boton, la aplicacion no se active procedure TForm1.MOUSEACTIVATE(var Message: TWMMouseActivate); begin message.Result := MA_NOACTIVATE; end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin keybd_event(Ord(TSpeedButton(Sender).caption[1]), 0, 0, 0); // PostMessage(GetForegroundWindow, WM_CHAR, Ord(TSpeedButton(Sender).caption[1]), 0) end; Tambien probe enviar un mensaje a la ventana activa y tampoco me funciona. Tenes idea que estoy haciendo mal, por donde puedo seguir???? Gracias nuevamente. |
Cita:
Si no hay aplicación activa ¿como planeas envierle nada a la aplicación activa? Yo creo que vas a tener que enfocar el problema desde otro ángulo: en lugar de tratar de enviar la tecla a la aplicación activa trata de identificar plenamente la ventana (es decir, obtener su 'handle') a quien quieres enviársela para mandarlo a esa ventana. Lo del MouseActivate no creo que te funcione. Al parecer sólo sirve para que otra ventana de tu misma aplicación preserve el foco pero no una ventana de otra aplicación como ya te has dado cuenta. // Saludos |
Eso lo estuve haciendo de esta forma, pero tampoco me funciono:
PostMessage(GetForegroundWindow, WM_CHAR, Ord(TSpeedButton(Sender).caption[1]), 0) GetForegroundWindow me devuelve un valor <> 0, ¿tengo alguna forma de saber a quien pertenece ese handle?, para verificar si es el correcto. Con respecto a lo del MouseActivate, si eso no me sirve, como hago para que al clickear sobre un boton de una aplicacion que no esta activa, esta no tome el foco????, es decir, que la aplicacion actualmente activa no pierda el foco. gracias |
La franja horaria es GMT +2. Ahora son las 05:55:18. |
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