Ir al contenido


Foto

Como Controlar las teclas


  • Por favor identifícate para responder
11 respuestas en este tema

#1 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

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...
  • 0

#2 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

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.
  • 0

#3 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

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
  • 0

#4 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 14 mayo 2011 - 08:11

:angel: Lo siento no me di cuenta que era para Lazarus  :embarrassed: , la verdad no se si te valdrán los códigos expuestos.
  • 0

#5 German

German

    Member

  • Miembros
  • PipPip
  • 40 mensajes

Escrito 14 mayo 2011 - 10:47

Si los codigos sirven y los encuentras en la unidad LCLType.
Simplemente ponla en la clausula uses.
Saludos.

  • 0

#6 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

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.
  • 0

#7 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 14 mayo 2011 - 07:27

anexo  ejemplo de lo que creo que quieres hacer, utilizando el componente lazmouseandkeyinput

Archivos adjuntos


  • 0

#8 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

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:



delphi
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.  
  9.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  10.   ExtCtrls, windows, clipbrd;
  11.  
  12. ........ Luego .........
  13.  
  14. var
  15.   Form1: TForm1;
  16.  
  17. implementation
  18. {$R *.lfm}
  19.  
  20. { TForm1 }
  21.  
  22. procedure Pulsar(Key: Byte);
  23. begin
  24.   keybd_event(Key, 0, 0, 0);
  25.   keybd_event(Key, 0, KEYEVENTF_KEYUP, 0);
  26. End;
  27.  
  28. procedure TForm1.FormCreate(Sender: TObject);
  29. begin
  30. end;
  31.  
  32. procedure TForm1.Button1Click(Sender: TObject);
  33. begin
  34.   pulsar(VK_SNAPSHOT);
  35. end;
  36.  
  37. procedure TForm1.Button3Click(Sender: TObject);
  38. begin
  39.   pulsar(VK_NUMLOCK);      //funciona
  40. end;
  41.  
  42. procedure TForm1.Button4Click(Sender: TObject);
  43. begin
  44.   pulsar(VK_CAPITAL);
  45. end;
  46.  
  47. procedure TForm1.Button5Click(Sender: TObject);
  48. begin
  49.   pulsar(VK_SCROLL);
  50. end;
  51.  
  52. procedure TForm1.Button6Click(Sender: TObject);
  53. begin
  54.   pulsar(VK_SNAPSHOT);
  55. end;
  56.  
  57. 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.

  • 0

#9 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

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.






  • 0

#10 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

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:




delphi
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
  9.  
  10. type
  11.  
  12.   { TForm1 }
  13.  
  14.   TForm1 = class(TForm)
  15.     Button1: TButton;
  16.     procedure Button1Click(Sender: TObject);
  17.   private
  18.     { private declarations }
  19.   public
  20.     { public declarations }
  21.   end;
  22.  
  23. var
  24.   Form1: TForm1;
  25.  
  26. implementation
  27. uses
  28. MouseAndKeyInput, LCLType;
  29.  
  30. {$R *.lfm}
  31.  
  32. { TForm1 }
  33.  
  34. procedure TForm1.Button1Click(Sender: TObject);
  35. begin
  36.   keyinput.Press(VK_NUMLOCK);
  37. end;
  38.  
  39. 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.....


  • 0

#11 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

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.
  • 0

#12 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 259 mensajes

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..........
  • 0




IP.Board spam blocked by CleanTalk.