Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como hacer un teclado virtual en delphi? (https://www.clubdelphi.com/foros/showthread.php?t=87797)

cocute 26-02-2015 09:23:37

Como hacer un teclado virtual en delphi?
 
Como se puede hacer un teclado virtual en delphi?
tipo el que ya trae windows C:\Windows\System32\OSK.EXE

pero quiero uno personalizado con sólo unas pocas teclas, los completos no me sirven

ya se que hacer un teclado es facil, la cosa es como detecto que el foco,handle de la última aplicacíon que tenía activa
para enviarle la pulsación de una tecla¿?


gracias

Neftali [Germán.Estévez] 26-02-2015 10:41:47

Utiliza la API GetForeGroundWindow para obtener el handle de la ventana.

A partir de ahí deberías poder mandarle mensajes...

cocute 26-02-2015 11:22:34

Gracias ando buscando sobre como usarlo,
pruebo por ejemplo con esto que ge visto por un foro pero no va, quiero por ejemplo enviar la pulsacion de la tecla A:
SendMessage(GetForegroundWindow, WM_GETTEXT, 255,Integer(PChar(65)));
y lo de GetActiveWindow también tendría que usarlo?

engranaje 26-02-2015 13:39:06

Has revisado esta entrada del foro?

http://www.clubdelphi.com/foros/showthread.php?t=31113

cocute 26-02-2015 14:09:53

Cita:

Empezado por engranaje (Mensaje 489388)
Has revisado esta entrada del foro?

http://www.clubdelphi.com/foros/showthread.php?t=31113

gracias lo he probado, pero me falta saber como meto la ventana en
hwndWinamp := FindWindow(nil,pchar(rtrim(gWindowName))); //localizamos la ventana
vamos que tengo que hacer con el gWindowName
porque si pongo
gWindowName='nombre de la ventana que quiero controlar'
me da error, me dice que tiene que ser hwnd no un string

engranaje 27-02-2015 09:04:15

Puedes revisar este ejemplo que Peter Below publicó hace algún tiempo en:
http://cc.embarcadero.com/item/18590

Lo cierto es que necesitas el handle de la ventana a la que enviar las teclas y la mejor manera es utilizar foreground enviandola a la ventana activa pero para ello debes conseguir que la ventana en la que está el teclado nunca pueda obtener el foco y pasar a ser la activa. El ejemplo del link debería servirte de ayuda para poder conseguirlo, revisa la clase TNumericKeypad.

cocute 27-02-2015 09:21:19

Cita:

Empezado por engranaje (Mensaje 489433)
Puedes revisar este ejemplo que Peter Below publicó hace algún tiempo en:
http://cc.embarcadero.com/item/18590

Lo cierto es que necesitas el handle de la ventana a la que enviar las teclas y la mejor manera es utilizar foreground enviandola a la ventana activa pero para ello debes conseguir que la ventana en la que está el teclado nunca pueda obtener el foco y pasar a ser la activa. El ejemplo del link debería servirte de ayuda para poder conseguirlo, revisa la clase TNumericKeypad.

Muchas gracias, había probado un montón de ejemplos pero el que me pones es el único que he conseguido hacer funcionar como esperaba.

cocute 28-02-2015 15:49:16

Con ese ejemplo lo he modificado para el modo que lo necesito,
el problema que no se por qué
hay veces que funciona y otras veces tengo que hacer click en el icono de la barra de tareas para que funcione,
hay algo mal, pero el codigo del ejemplo es tan complicado que no se que es lo que falla:
a ver si alguno veis el fallo:
https://dl.dropboxusercontent.com/u/18024062/Prueba.rar

Además, seguro que hay un modo menos complicado de hacer esto pero no encuentro otro modo de que funcione.

cocute 01-03-2015 09:23:12

Aunque seguramente no sea el mejor modo ya más o menos lo he conseguido que haga lo que quiero,
añadiendo al FormShow
NumericKeypad.WindowState:=WSMinimized;
NumericKeypad.WindowState:=WSNormal;


La franja horaria es GMT +2. Ahora son las 11:17:52.

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