FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Hook de teclado con filtro de pulsaciones
Hola amigos, me gustaria crear un hook el cual me permita capturar las pulsaciones de teclado y poder anular pulsaciones como el Ctrl+C y otras que interfieran con el buen funcionamiento de mi aplicacion. Tengo este codigo:
dll.cpp: Código PHP:
Código PHP:
Código PHP:
Otra cosa, ¿por que me exporta CreaHook como _CreaHook?¿No se supone que el extern "C" evita eso? |
#2
|
||||
|
||||
Este me funciona fenomenal pero no me evita que se ejecute el atajo de teclas en la ventana en que esté en ese momento:
Trozo de codigo de Unit1.h: Código PHP:
Código PHP:
|
#3
|
||||
|
||||
me han comentado que lo que quiero hacer se hace con RegisterHotKey y UnregisterHotKey. He encontrado algun ejemplo incluso aqui y quiero probar pero mi duda es ¿Que pasa si el HotKey global ya existe? Por ejemplo Ctrl+C si yo creo la mia supongo que la mia sobreescribe la que hay y al eliminar la mia ¿Vuelve a estar operativa la anterior o me la he cargado? Evidentemente el Id seria diferente.
|
#4
|
||||
|
||||
Puedes hacerlo como quieras. El Hook engancha antes de procesar la pulsación. HotKey te envía un mensaje.
El problema es actuar en el ClipBoard, tienes que trampearlo. No es necesaria una dll para un hook de teclado, hazlo a bajo nivel. Te muestro un ejemplo simple para evitar la copia al ClipBoard con un Hook LL al teclado: Código PHP:
|
#5
|
||||
|
||||
mmm ¿pero eso tendria que hacer trampeos con todas las combinaciones? Segun me dijeron, con RegisterHotKey se ejecuta la que yo quiero y yo me encargo de que se ejecute lo demas que se deba ejecutar para esa combinacion. Creo que si es asi me quedo con ese metodo.
|
#6
|
||||
|
||||
Mi respuesta responde al título del hilo: "Hook de teclado con filtro de pulsaciones"
Para conseguir tu objetivo con el ClipBoard, el método por hotkeys es más fácil y directo en este caso, pero no es un hook, de forma tendrás que registrar cada combinación de teclas que quieras manejar para otras cuestiones. Tu eliges que técnica usar. Saludos. |
#7
|
||||
|
||||
¿Y por que no me funcionaba usando la dll? Me interesa saber como seria para que funcione con la dll.
|
#8
|
||||
|
||||
¿No te funciona el Hook?, entendí que si, que lo que no funciobaba era el bloqueo del clipboard.
Si es así, revisa como lbloqueo el clipboard en el ejemplo que puse. Básicamente cuando una app usa Ctl-C para copiar, abro el clipboard, lo vacío y lo dejo abierto para evitar que la app lo use hasta que se pulse Ctl-V monento en que lo cierro y dejo libre. Al deshacer el hook también cierro el clipboard para liberarlo. Es por eso que digo "trampear el clipboard". Revisa el código. Saludos. |
#9
|
||||
|
||||
en mi hook no capturaba las teclas especiales como las Fx, flechas, ctrl, shift,... El tuyo no he podido probarlo aun. A lo que me refiero es que ¿como hago para que me capture esas teclas?
|
#10
|
||||
|
||||
Bueno, me he decidido por usar el registrado de los atajos y tengo esto:
Código PHP:
Código PHP:
|
#11
|
||||
|
||||
Cita:
Código PHP:
Código PHP:
Saludos. |
#12
|
||||
|
||||
Registrando HotKeys:
Código PHP:
|
#13
|
||||
|
||||
Amigo el hook va fantastico, lo he modificado un poquitin y quedó así:
App: Código PHP:
Código PHP:
http://docs.embarcadero.com/products...OnMessage.html Por lo que puedo entender en el comentario del final del codigo dice que si no lo pongo yo handled a true será gestionado por otros manejadores y no veo que el haga nada al respecto si no lo maneja el y así lo dejé yo: App.h: Código PHP:
Código PHP:
|
#14
|
||||
|
||||
La mejor forma de hacer un hook al teclado es el de bajo nivel, WH_KEYBOARD_LL sin dll. Es el primer hook que te mostré.
Las HotKeys funcionan tanto si los mensajes los tratas a nivel de formulario (a bajo nivel, con sobreescritura de la función WndProc, o capturando mensajes estilo delphi, como capturando los mensajes en TApplication (Application->OnMessage) Los mensajes WM_HOTKEY reciben en wParam el id usado para registrar la tecla. con dicho id conoces la tecla regictrada. Yo uso como dato de ese id le VK_ de la tecla que registro, así no tengo pérdidas. Lo siguiente registra Ctl-C: Código PHP:
Código PHP:
Saludos. |
#15
|
||||
|
||||
Yo uso MAKEINTATOM para obtener el id con lo que para poder hacerlo como indicas tendria que almacenar todos los ids de los atoms y luego usar estos en los cases. La verdad es que asi ya funciona perfectamente y el codigo lo saque de codegear.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
como capturar pulsaciones del teclado y guardarlo en un archivo txt | kurono | Varios | 25 | 15-01-2008 12:25:26 |
Hook de Teclado + DLL | FeLiXxUcO | C++ Builder | 12 | 12-02-2006 19:59:53 |
capturar pulsaciones de teclado | i_berbeu | C++ Builder | 3 | 08-02-2006 23:00:35 |
Hook de teclado! | marceloalegre | Varios | 2 | 17-10-2005 00:59:47 |
Obtenert el handler de la ventana donde se han de enviar las pulsaciones del teclado | ASAPLTDA | API de Windows | 0 | 07-04-2005 23:38:56 |
|