Ver Mensaje Individual
  #4  
Antiguo 31-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
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:
Código Delphi [-]
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:

Código Delphi [-]
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

Última edición por Lepe fecha: 31-08-2005 a las 22:54:43.
Responder Con Cita