![]() |
bloqueador de teclado antigatos
Bueno, esto suena chistoso pero estoy cansado de que mis gatos masajeen mi teclado y he estado buscando soluciones para bloquear el teclado y que por mucho que pisen no hagan ningun estropicio. Todo lo que he encontrado por la red ha sido referente a una app que haga un hook del teclado y deseche las pulsaciones hasta que haya una combinacion de teclas deseadas o una palabra o algo asi. He escrito este codigo pero funciona a medias:
Código PHP:
|
Algo sencillo es usar la función del API "BlockInput" (hay que ejecutarla con privilegios de administrador), bloquea tanto el teclado como el ratón hasta que se cierra el proceso que la invoco o usando la combinación CTRL+ALT+SUPR (que si los gatos ya conocen esta combinación se fastidio la cosa) ;-)
|
Realmente no aportaré mucho con lo siguiente pero... Que genial idea, mis gatos se ven tan bonitos ahí estorbando que es imposible bajarlos, así que o los enseñamos a no subirse ahí (cosa posible pero con mucha paciencia) o esperaré con ansias tu app, pues suena genial.
|
Bueno, el codigo funciona perfectamente y es este:
Código PHP:
|
¿a ver si es esto?
Application-> ShowMainForm := False ; La idea es buena, pero creo hay alternativas más fáciles, por ejemplo salvapantallas con contraseña y acceso directo en el escritorio para activarlo con tecla rápida global a windows (hook que todo acceso directo tiene implementado). No tengo gato, pero uso algo parecido para apagar los monitores inmeditamente (screenOFF.exe bajado de internet). |
Es lo que tu dices y ya lo puse. Con respecto a usar un salvapantallas pues no sirve porque a veces estoy viendo una peli y el gato decide que el teclado es una buena cama jajaja.
Ahora que he puesto esa linea aparece una excepcion al mostrar el menu del systrayicon. El problema es que no hay ningun form activo al ser el unico y estar oculto y el componente hace uso de este codigo: Código PHP:
He hecho un chapú para solucionarlo que es hacer en el evento OnCreate del form Form1->Show() y Form1->Hide() y con eso ya hay un form activo y no falla pero durande unas decimas aparece y desaparece el form y no quiero que pase eso. |
Asi lo tengo ahora mismo:
Código PHP:
|
Veo que diste con la solución pero para el bloqueo no deberías devolver 1 sino -1.
En este enlace puse un ejemplo para bloquear teclado y ratón sólo para la aplicación que realiza el hook. Saludos. |
Ok, ya reviso mañana un par de cosas que indicas en tu código.
Lo de que al no haber form activo da una excepcion ¿no hay alguna opción mejor que lo que hago para solucionarlo? Es que pienso que es una chapuceria y tiene que haber algún modo mejor. Se me ocurre comentar esas líneas del componente y recompilar pero no se que tan buena idea seria eso. |
Interesante idea. :)
Otro posible uso de la aplicación podría ser permitir limpiar el teclado sin tener que apagar la compu'. Saludos. |
Escafandra he estado probando cosas de tu código y esta línea no consigo pasarla a C++Builder:
Código PHP:
Código PHP:
|
Mi Builder no tiene la función PtInRect pero la puedes definir así:
Código PHP:
Código PHP:
Saludos. |
A mi si me lo reconoce. La funcion la tengo asi:
Código PHP:
Cita:
|
Cita:
Hazlo así: Código PHP:
|
Cita:
He aprovechado para corregir eso y ampliar esa funcionalidad de forma sencilla. Código PHP:
Saludos |
Bueno pues tengo novedades.
La primera es que al final he decidido que no quedaba todo lo correcto que pensaba el que no se mostrase el form principal al inicio asi que he quitado esa parte del codigo y ahora permito que salga de inicio. La segunda es que despues de haber solucionado el error que me daba en lo del hook del mouse de un modo diferente usando: Código PHP:
Código PHP:
PD: Escafandra muchas gracias por arreglar lo del componente ya que ahora mismo en este proyecto no lo necesitaré pero seguro que en otro momento si. Gracias a todos. |
Algunas aclaraciones:
1.- SysTrayIcon1->ShowBalloon no mostrará nada si la App no es visible en el SysTray. 2.- Cuidado de no modificar la clave inadvertidamente pues tendrás problemas si bloqueas teclado y ratón. 3.- ¿No te parece más simple esta forma de detectar la clave? Código PHP:
|
1. Lo se :p.
2. También lo se jejeje. 3. Pues si que se ve más clara y sencilla así que lo cambiaré. Por cierto, en el form uso un checkbox que indicará si se bloquea el ratón o no y en el popup del systrayicon tengo un ítem el cual se tilda o no igual y que realiza la misma función. Siempre tienen que estar ambos igual. Como lo tengo funciona pero no se si es lo más correcto o hay un modo mejor. |
Me di cuenta que tu solucion aun se podia reducir mas y la he dejado así:
Código PHP:
|
He descubierto un inconveniente y no se a que se debe. Si ejecutó la aplicación y activo el bloqueo y doy a apagar el pc, empiezan a cerrarse todas las aplicaciones pero no se apaga. Si doy a Ctrl + Alt +Sup veo que, aunque mi aplicación parece haberse cerrado y no aparece ni la ventana ni en el systray, mi aplicación sigue en la lista de aplicaciones. Da igual cuantas veces de a apagar que mientras siga mi aplicación en la lista no se apaga el pc y además sigue estando el bloqueo activo. Si lo termino desde el administrador de aplicaciones y doy apagar ya si se apaga. ¿alguien sabe que puede estar pasando y como solucionarlo?
|
La franja horaria es GMT +2. Ahora son las 15:38:11. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi