In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Uso de HotKey

Foro público de Xailer en español
Responder
Avatar de Usuario
xhermita
Mensajes: 177
Registrado: Vie Feb 18, 2011 10:05 pm
Ubicación: Las Palmas de Gran Canaria
Contactar:

Uso de HotKey

Mensaje por xhermita »

Necesito detectar ciertas pulsaciones del teclado desde un programa que no tiene la ventana activa, he probado muchas cosas y he tropezado con las funciones del API de windows que Xailer implementa RegisterHotKey y UnRegisterHotKey.

Hasta aqui todo bien, con ellas me valdria, el problema es como hago para que mi programa detecte que se han producido un HotKey.

¿En que evento lo detecto?

¿o que tengo que leer periodicamente para saber que el sistema me manda el evento WM_HOTKEY?

Un saludo
Pedro Amaro
2PC Service

Xailer / Néfele / MySQL-MariaDB / SQLServer
Avatar de Usuario
xhermita
Mensajes: 177
Registrado: Vie Feb 18, 2011 10:05 pm
Ubicación: Las Palmas de Gran Canaria
Contactar:

Re: Uso de HotKey

Mensaje por xhermita »

¿Hay algun ejemplo del uso de la clase THotKey?

He estado buscando de Samples y no veo nada.
Pedro Amaro
2PC Service

Xailer / Néfele / MySQL-MariaDB / SQLServer
Avatar de Usuario
xhermita
Mensajes: 177
Registrado: Vie Feb 18, 2011 10:05 pm
Ubicación: Las Palmas de Gran Canaria
Contactar:

Re: Uso de HotKey

Mensaje por xhermita »

Toda esta investigación es debida a que tengo terminado un proyecto a medida que me pidio un cliente, todas las pruebas han ido bien, pero ahora al instalarlo en algunos de los equipos del cliente, en concreto los TPV que tienen instalado el FARMATIC, me encuentro que cuando el FARMATIC es la ventana activa mi programa que se esta ejecutando como NotifiIcon no recibe las pulsaciones del teclado. Si FARMATIC deja de ser la ventana activa todo funciona perfectamente, esto lo habia probado con Navegadores, Clientes de correo y otros muchos programas y no me habia dado problema.

Solo necesito leer dos juegos de pulsaciones de teclas ya que son dos las funciones que quiero que se ejecuten, admito CONTROL, ALT, WINDOWS, SHIFT y las teclas numericas, alfanumericas y las de función.

Yo inicialmente utilizaba CONTROL+WINDOWS+9 y CONTROL+WINDOWS+8 para que no se cruzaran con ningun HotKey del sistema.

¿Alguna idea de por donde sigo?
Pedro Amaro
2PC Service

Xailer / Néfele / MySQL-MariaDB / SQLServer
Avatar de Usuario
xhermita
Mensajes: 177
Registrado: Vie Feb 18, 2011 10:05 pm
Ubicación: Las Palmas de Gran Canaria
Contactar:

Re: Uso de HotKey

Mensaje por xhermita »

Bueno, me voy respondiendo a mi mismo para que quede constancia para otros que necesiten usan HotKeys;

Declaro los HotKey que necesito con la función del API de Windows que esta accesible desde Xailer "RegisterHotKey", tiene 4 parametros;

1.- El Handle de la ventana a la que queremos que avise cuando se pulsa el HotKey
2.- Un numero de HotKey, ya que podemos creara varios para la misma ventana
3.- Aquí le indicamos las Teclas especiales que participan en el HotKey;
- ALT - 0x0001
- CONTROL - 0x0002
- SHIFT - 0x0004
- WINDOWS - 0x0008
Hay un quinto valor, pero segun la documentación en Windows Vista no funciona y no se si funcionara en los siguientes
Sumandolos obtenemos la combinación de teclas ( ALT+CONTROL= 0x0003 ).
Que conste que la de Windos no me ha funcionado, pero hay que probar mas.
4.- La tecla que no es especial del HotKey; es en formato Virtual Key, podeis incontrar una lista aquí
https://msdn.microsoft.com/es-es/librar ... s.85).aspx

En mi caso cree dos HotKey con las combinaciones CONTRO+ALT+9 y CONTROL+ALT+8

RegisterHotKey ( ::Handle, 1, 0x003, 0x39 )
RegisterHotKey ( ::Handle, 2, 0x003, 0x38 )

Ahora tenemos que capturar el mensaje, y aunque nunca lo pense, es lo más facil.

En nuestro Programa tenemos que declarar el metodo que se ejecutara al producirse el EVENTO WM_HOTKEY

METHOD WMHotKey( nId, nParam, Handle )

Y el consiguiente codigo del Metodo

METHOD WMHotKey( nId, nParam, Handle ) CLASS TfrmPulsador

RETURN Nil


Los parametros que nos devuelve el evento WM_HOTKEY son;
nId - El numero de HotKey que le pusimos al crearlo
nParam - Con LoWord nos da las teclas especiales que definimos y con HiWord la tecla no especial (Gracias a José Lalín, la verdad que no tenia ni idea)
Handle - El Handle de la ventana que deberia recibir el Evento ( El mismo que le pusimos al crearlo)

Bueno por ahora funciona bien, el lunes lo probare en el cliente, pero teoricamente deberia funcionar ya que el evento le llega directamente a la ventana que lo declaro y no a otras.

En lo que si que ha ganado ya el programa, es que antes usaba timer para leer periodicamente el teclado y aunque lo pusiera muy rapido aveces tenias que darle dos veces, ahora con los HotKey es instantaneo y el programa no consume tiempo del procesador leyendo el teclado.

Un saludo a todos, ya os contare el lunes como ha ido.
Última edición por xhermita el Dom Nov 01, 2015 10:06 pm, editado 2 veces en total.
Pedro Amaro
2PC Service

Xailer / Néfele / MySQL-MariaDB / SQLServer
Avatar de Usuario
xhermita
Mensajes: 177
Registrado: Vie Feb 18, 2011 10:05 pm
Ubicación: Las Palmas de Gran Canaria
Contactar:

Re: Uso de HotKey

Mensaje por xhermita »

Perfecto, funciona a las mil maravillas.
Pedro Amaro
2PC Service

Xailer / Néfele / MySQL-MariaDB / SQLServer
avitalini
Mensajes: 141
Registrado: Mié Ene 07, 2015 6:31 pm

Re: Uso de HotKey

Mensaje por avitalini »

Excelente aportación
Gracias!
Avatar de Usuario
bingen
Mensajes: 565
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

Re: Uso de HotKey

Mensaje por bingen »

Muy bueno, menudo lio que has resuelto.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
Responder