
Como Controlar las teclas
Comenzado por
monchito_elroro
, may 13 2011 08:27
11 respuestas en este tema
#1
Escrito 13 mayo 2011 - 08:27
buenas noches con todos, quisiera hacerles una consulta:
como podría controlar las teclas desde un programita, por ejemplo:
que al presionar un botón del form ejecuta la acción de una tecla
como puede ser la tecla "windows", "CapsLock" o la tecla "NumLook",
las teclas F1,F2,F3....etc
PD:
en el caso del NumLock creo tendría que prenderse su LED ......
gracias por su tiempo...
como podría controlar las teclas desde un programita, por ejemplo:
que al presionar un botón del form ejecuta la acción de una tecla
como puede ser la tecla "windows", "CapsLock" o la tecla "NumLook",
las teclas F1,F2,F3....etc
PD:
en el caso del NumLock creo tendría que prenderse su LED ......
gracias por su tiempo...
#2
Escrito 14 mayo 2011 - 01:29
Hola mochito te dejo un par de links de una pagina de brasil que están muy bien , el primero va sobre las teclas de función el segundo sobre Caps,Num y Scroll que también preguntabas y por último un listado de las teclas.
http://www.planetade...k,-alt f4,-etc.
http://www.planetade...k-e-scroll-lock
http://www.planetade...digo-das-teclas
Espero te sirvan de ayuda.
http://www.planetade...k,-alt f4,-etc.
http://www.planetade...k-e-scroll-lock
http://www.planetade...digo-das-teclas
Espero te sirvan de ayuda.
#3
Escrito 14 mayo 2011 - 03:48
hay un componente que se llama mouseandkeyinput que puede ayudarte a lograr lo que quieres. . Instala ese paquete y prueba el ejemplo que trae.
http://wiki.lazarus....ouseAndKeyInput
http://wiki.lazarus....ouseAndKeyInput
#4
Escrito 14 mayo 2011 - 08:11


#5
Escrito 14 mayo 2011 - 10:47
Si los codigos sirven y los encuentras en la unidad LCLType.
Simplemente ponla en la clausula uses.
Saludos.
Simplemente ponla en la clausula uses.
Saludos.
#6
Escrito 14 mayo 2011 - 05:41
lo que yo entiendo que pide monchito es el simular el haber presionado una tecla. Porque el quiere presionar un boton en el form y que este simule el que presionó la tecla numlock. Esto entiendo que se hace con keyb_event o algo asi en delphi, pero en lazarus no existe eso. Por ello es la sugerencia del componente que indico anteriormente.
#7
Escrito 14 mayo 2011 - 07:27
anexo ejemplo de lo que creo que quieres hacer, utilizando el componente lazmouseandkeyinput
Archivos adjuntos
#8
Escrito 16 mayo 2011 - 08:25
buenas noches amigos y gracias por sus repuestas
de momento estoy usando este código con el cual puedo prender los LED
del teclado y también puedo capturar la pantalla:
El programa funciona bien, de todas maneras Les pido me digan si esta bien o
si hay otra alternativa.....
gracias
PD:
Con el método de "mouseandkeyinput" lo he encontrado en "C:\lazarus\components\mouseandkeyinput" pero no lo puedo
unir a lazarus, si estoy bien se hace con el archivo "lazmouseandkeyinput.lpk" este se compila bien pero no quiere
instalarse......
ahora lo tengo que unir por "Proyecto - Opciones del Proyecto - Opciones del compilador - Otros archivos de Unidad (-Fu)"
y así recién me funciona..... Abrá otra manera de unir "mouseandkeyinput" a Lazarus o estoy haciendo algo mal.
de momento estoy usando este código con el cual puedo prender los LED
del teclado y también puedo capturar la pantalla:
delphi
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, windows, clipbrd; ........ Luego ......... var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure Pulsar(Key: Byte); begin keybd_event(Key, 0, 0, 0); keybd_event(Key, 0, KEYEVENTF_KEYUP, 0); End; procedure TForm1.FormCreate(Sender: TObject); begin end; procedure TForm1.Button1Click(Sender: TObject); begin pulsar(VK_SNAPSHOT); end; procedure TForm1.Button3Click(Sender: TObject); begin pulsar(VK_NUMLOCK); //funciona end; procedure TForm1.Button4Click(Sender: TObject); begin pulsar(VK_CAPITAL); end; procedure TForm1.Button5Click(Sender: TObject); begin pulsar(VK_SCROLL); end; procedure TForm1.Button6Click(Sender: TObject); begin pulsar(VK_SNAPSHOT); end; end.
El programa funciona bien, de todas maneras Les pido me digan si esta bien o
si hay otra alternativa.....
gracias
PD:
Con el método de "mouseandkeyinput" lo he encontrado en "C:\lazarus\components\mouseandkeyinput" pero no lo puedo
unir a lazarus, si estoy bien se hace con el archivo "lazmouseandkeyinput.lpk" este se compila bien pero no quiere
instalarse......
ahora lo tengo que unir por "Proyecto - Opciones del Proyecto - Opciones del compilador - Otros archivos de Unidad (-Fu)"
y así recién me funciona..... Abrá otra manera de unir "mouseandkeyinput" a Lazarus o estoy haciendo algo mal.
#9
Escrito 17 mayo 2011 - 09:42
Solo Tienes que ir a Paquetes, instalar/desinstalar paquetes y luego buscas lazmouseandkeyinput y le das a instalar. luego de esto reconstruyes lazarus y listo.
si ya lo instalaste, lo cual puedes verificar buscandolo en la ventana instalar. Si lo encuentras entonces solo debes poner en el uses de tu formulario la unidad lazmouseandkeyinput.
prueba y dime si te da a lgun error.
si ya lo instalaste, lo cual puedes verificar buscandolo en la ventana instalar. Si lo encuentras entonces solo debes poner en el uses de tu formulario la unidad lazmouseandkeyinput.
prueba y dime si te da a lgun error.
#10
Escrito 17 mayo 2011 - 01:02
Que tal amigos y gracias luk2009 por tu ayuda lo probaré en un momento, otro que quería decirles es que mediante "MouseAndKeyInput" también puedo simular
que presiono las teclas.... usando este código:
Funciona correctamente (uniendo la unit en "Proyecto - Opciones del Proyecto - Opciones del compilador - Otros archivos de Unidad (-Fu))"
pero he leído en el "readme.txt" del MouseAndKeyInput que al parecer
no sugiere hacerlo de esta manera, es decir dice algo así:
Restrictions
* it is not recommended calling mouse and key input directly from events like OnClick, use Application.QueueAsyncCall instead
* do not forget to set back mouse button and key state after Down method with Up method
Según lo que yo entiendo es que dice que no recomienda hacerlo desde el evento Onclick, que es lo que yo estoy haciendo
al darle clic al botón del form.....
Ustedes creen que pase algo malo.......GRACIAS.....
que presiono las teclas.... usando este código:
delphi
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation uses MouseAndKeyInput, LCLType; {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin keyinput.Press(VK_NUMLOCK); end; end.
Funciona correctamente (uniendo la unit en "Proyecto - Opciones del Proyecto - Opciones del compilador - Otros archivos de Unidad (-Fu))"
pero he leído en el "readme.txt" del MouseAndKeyInput que al parecer
no sugiere hacerlo de esta manera, es decir dice algo así:
Restrictions
* it is not recommended calling mouse and key input directly from events like OnClick, use Application.QueueAsyncCall instead
* do not forget to set back mouse button and key state after Down method with Up method
Según lo que yo entiendo es que dice que no recomienda hacerlo desde el evento Onclick, que es lo que yo estoy haciendo
al darle clic al botón del form.....
Ustedes creen que pase algo malo.......GRACIAS.....
#11
Escrito 17 mayo 2011 - 05:40
si te fijas en el ejemplo que te he puesto para descargar, el evento onclick llama a QueueAsyncCall o sea que no realiza el procedimiento directamente. revisa y dime.
#12
Escrito 17 mayo 2011 - 10:02
Estas en lo cierto...... pero mi interrogante es si usando el evento Onclick directamente puede pasar algo......... como les muestro en mi código si me resulta haciendolo directamente, pero no sé.............
Al utilizar el evento Onclick directamente no me pasa nada.......
pero como el autor nos lo advierte puede que pase algo no?
es que si aumento QueueAsyncCall o algo parecido me puedo confundir..........
Al utilizar el evento Onclick directamente no me pasa nada.......
pero como el autor nos lo advierte puede que pase algo no?
es que si aumento QueueAsyncCall o algo parecido me puedo confundir..........