Ver la Versión Completa : llamar mi aplicacion con una combinacion de teclas
gulder
30-08-2005, 23:14:29
hola delphianos como anan mi pregunta es la siguiente mi aplicacion esta escondida en la sona del tray nada mas se ve el icono yo necesito que al precionar una combinacion de teclas o incluso una sola tecla mi aplicacion aparesca grasias por la atencion prestada
Hola,
En la Jedi library (http://www.delphi-jedi.org/) cuentas con un componente de nombre "JvApplicationHotKey", el cual hallarás en la pestaña "Jv Application, Forms" que podría irte bien. Empero, yo he probado el componente "HotKeyManager (http://www.delphi32.com/vcl/5308/)" y me ha ido muy bien con el mismo. Básicamente puedes añadir combinaciones de teclas (o, simplemente, teclas) y responder a un evento que se produce cuando son pulsadas: independientemente de si tu publicación está "activa", "en segundo plano", "minimizada", etc., etc. Entrambos componentes son de código abierto.
gulder
31-08-2005, 17:47:44
listo voy a probar con lo que me recomendaron y despues les comento
Lo comentado por dec, es para las teclas rápidas pulsadas cuando tu aplicación tiene el foco, y quieres centralizar el proceso de qué hace cada tecla rápida al ser pulsada.
Al estar la aplicación escondida, hay que hacer un Hook a windows con esa tecla rápida, para ello se puede usar las funciones RegisterHotKey de la api de windows.
A partir de aquí, da igual en qué programa estes, al pulsar esa combinación, se enviará esa tecla a tu programa.
Para registrar las teclas puedes usar esto:
procedure TForm1.DecodeHotKey(shortcut: Tshortcut; var key: Word; var modif: Integer);
var
comb: String;
shiftkey: TshiftState;
begin
modif := 0;
shortcuttokey(shortcut, key, shiftkey);
comb := shortcuttotext(shortcut);
if pos('Shift', comb) <> 0 then
inc(modif, 4);
if pos('Ctrl', comb) <> 0 then
inc(modif, 2);
if pos('Alt', comb) <> 0 then
inc(modif, 1);
end;
procedure FormCreate;
var teclappal :word;
modificadores:integer;
begin
// suponemos que en Hotkey1.Hotkey es la tecla F10
decodehotkey(hotkey1.hotkey, teclappal, modificadores);
registerhotkey(self.Handle, 0, modificadores, teclappal);
// EL PARAMETRO CON UN CERO, NOS SIRVE PARA IDENTIFICAR ESTE HOTKEY
// suponemos que en Hotkey2.Hotkey es la tecla F11
decodehotkey(hotkey2.hotkey, teclappal, modificadores);
registerhotkey(self.Handle, 1, modificadores, teclappal);
// EL PARAMETRO CON UN UNO, NOS SIRVE PARA IDENTIFICAR ESTE HOTKEY
end;
procedure FormClose;
begin
unregisterhotkey(self.Handle, 0);
unregisterhotkey(self.Handle, 1);
end;
Ahora, en nuestro programa tenemos que detectar cuando windows nos informa que se ha presionado F10 o F11:
TForm1 = class (Tform)
protected
procedure WndProc(var Msg: TMessage); override;
end;
procedure TForm1.WndProc(var Msg: TMessage);
begin
if msg.msg = wm_hotkey then
begin
// esto es lo interesante, al registrar una combinación
// le damos un número entero, partiendo de cero y sumandole uno
// si vamos a registrar varias teclas rápidas.
// Pues ese número es el que llega en msg.WParam
case msg.WParam of
0: Form1.Show; // se pulsó la tecla F10
1: Application.Terminate;// se pulsó la tecla F11
end;
espero se entienda.
EDITO: No incluyo los uses porque son varios, simplemente haz clic sobre uno de ellos y pulsa F1, la ayuda de delphi te dirá los uses que necesites.
Un saludo
Hola,
Lo comentado por dec, es para las teclas rápidas pulsadas cuando tu aplicación tiene el foco, y quieres centralizar el proceso de qué hace cada tecla rápida al ser pulsada.
No, Lepe, de veras que no: el componente que menciono en segundo lugar consigue precisamente lo que comentas, porque, de hecho, las combinaciones de teclas o teclas pueden ser "respondidas" independientemente de que la aplicación tenga o no el foco: he hecho algún programa con él y doy fe que funciona estupendamente.
En definitiva el componente "HotKeyManager (http://www.delphi32.com/vcl/5308/)" te permite añadir tantas combinaciones de teclas o teclas solas como te sean menester. Luego este cuenta con un evento "OnHotKey" en el cual puedes determinar qué tecla o teclas se pulsaron y obrar en consecuencia: insisto, independientemente de que la aplicación guarde o no el foco del usuario en ese punto.
gulder
01-09-2005, 16:37:24
Hola,
En definitiva el componente "HotKeyManager (http://www.delphi32.com/vcl/5308/)" te permite añadir tantas combinaciones de teclas o teclas solas como te sean menester. Luego este cuenta con un evento "OnHotKey" .
hola a todos mira dec disculpame la ignorancia pero ese componente no lo pude encontrar por ningun lado dime si tengo que instalarlo, bajarmelo de algun lado o delphi lo trae estoy utilizando delphi 7 grasias de antemano.
hola Lepe grasias voy a probar el codigo que dices att logula
Hola,
El enlace que te propuse (en el nombre del componente) te lleva a la página Delphi32.com (http://www.delphi32.com) desde donde puede descargarse. No aparece, sin embargo, la página del propio componente o la del autor del mismo.
Aquí te indico el enlace para descargarlo (http://downloads.delphi32.com/2726/5308/hotkeymg.zip) directamente. Por cierto, añadiendo algo a lo dicho. El componente que incluye la Jedi Library (http://www.delphi-jedi.org/) funciona muy bien (supongo que internamente hace algo similar a lo que Lepe refiere) pero tiene una diferencia respecto de "HotKeyManager (http://www.delphi32.com/vcl/5308/)".
El de la Jedi Library (http://www.delphi-jedi.org/) solo permite incluir una determinada combinación de teclas (siempre podrías añadir varios componentes, claro está), empero, "HotKeyManager (http://www.delphi32.com/vcl/5308/)" puede manejar más de una combinación de teclas al mismo tiempo y pueden añadirse y/o quitarse además en tiempo de ejecución.
Después de todo lo dicho cabe añadir tal vez algo: lo que propone Lepe acaso pudiera servirte perfectamente: de hecho los componentes mencionados deben hacer el trabajo de forma muy similar y, en caso de que te decidas a hacerlo así, te evitas el uso de componente alguno.
gulder
02-09-2005, 18:26:00
grasias dec ya me baje el componente de donde me digiste disculpenme por mi ignorancia lo voy a provar
gulder
02-09-2005, 18:57:38
hola lepe probe tu codigo y me aparecio el siguiente codigo en las siguientes funciones shortcuttokey, shortcuttotext las busque en la ayuda y estaban en ma yuscula la iniciales esa parte la corregi despues me pide que declare en la parte del uses lo siguiente ssCtrl lo ejecuto y me bota el siguiente error ssCtrl.dcu o ssCtrl.pas alguno de los dos no se que hacer de antemano grasias. :confused:
Hola,
En cuanto a las diferecias entre mayúsculas y minúsculas no tiene importancia, en el sentido de que no es estrictamente necesario que se escriban de una forma u otra. En cuanto a la función y el procedimiento en cuestión estos se hallan en la unidad "Menus.pas". "scCtrl" no es una unidad, es una constante que se declara en "Classes.pas".
gulder
02-09-2005, 20:10:01
si las mayusculas no importan pense que estaba en c++ de la de scCtrl la voy a probar
Hola,
No, Lepe, de veras que no: el componente que menciono en segundo
Yo solo leí hasta el JvApplicationHotKey :D, lo siento.
He obviado decir qué es el Hotkey1, no está demás indicarlo: Hotkey1 es el componente que trae delphi en la paleta Win32 y que permite que el usuario final, decida la combinación de teclas que desea usar. El uso bien podría ser a través de un TactionList o Taction Manager, con los cuales, podemos asignar una tecla rápida (Shortcut) a cualquier botón o componente que tenga la propiedad Action.
Decidida la tecla rápida a usar, solo hay que asignarla en tiempo de ejecución al menú, o TAction que se desee, por tanto, se puede permitir que el usuario decida la tecla que desee y tambien, qué operación quiere que realice.
Un saludo
Hola,
Yo solo leí hasta el JvApplicationHotKey :D, lo siento.
Bueno... el caso es que ese componente también consigue lo que el otro, salvo que no puede sino con una combinación de teclas, mientras que el otro puede con las que le echen. Pero de que lo sientas, nada de eso, hombre, pues no faltaba más que eso. ;)
gulder
05-09-2005, 19:56:35
grasias dec por la ayuda si me sirvio el componente que me indicaste que me bajara sirve de maravilla jejeje y lepe tambin grasias por el codigo que subiste a al foro
logula
vBulletin v3.6.8, Derechos ©2000-2013, Jelsoft Enterprises Ltd.