Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-08-2006
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Question Problemilla con Hook

Hola.

Veréis, en un programa que estoy haciendo tengo una barra de estado (TStatusBar), y en los paneles 3 y cuatro muestro el estado de las teclas BloqMaysu y BloqNum. Antes esto lo hacía con la función GetKeyState, y con un TTimer (cada 50 ms checkeaba el estado de las teclas y actualizaba la barra).

Hasta que descubrí los ganchos de teclado (Hooks). Encontré en el club una forma de hacerlos. La prueba funcionaba de maravilla, pero al ponerlo en práctica en mi programa, no funciona.

El código que tengo es este:

Código Delphi [-]
type
  TfrmPrincipal = class (TForm)
  {...}
  public
  Procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
  end;
 
{...}
 
procedure TfrmPrincipal.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.Message=WM_HOTKEY then
  begin
  If GetKeyState(VK_CAPITAL)=1 then Barra.Panels[3].Text:='MAYUS' else Barra.Panels[3].Text:='';
  If GetKeyState(VK_NUMLOCK)=1 then Barra.Panels[4].Text:='NUM' else Barra.Panels[4].Text:='';
  end;
end;
 
{...}
 
initialization
  RegisterHotKey(Application.Handle,GlobalAddAtom('mked_1.00b_HotKey_bloqM'), 0, VK_CAPITAL);
  RegisterHotKey(Application.Handle,GlobalAddAtom('mked_1.00b_HotKey_bloqN'), 0, VK_NUMLOCK);
 
finalization
  UnRegisterHotKey(Application.Handle,GlobalAddAtom('mked_1.00b_HotKey_bloqM'));
  UnRegisterHotKey(Application.Handle,GlobalAddAtom('mked_1.00b_HotKey_bloqN'));

¿Alguien podría decirme qué pasa?

Gracias.
Responder Con Cita
  #2  
Antiguo 11-08-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Como primera observación, no se trata de un Hook, se trata de una HotKey.
Como segunda observación yo probaría registrarlo directamente a la ventana en cuestión, a no ser que se trate de un MDI, de ser así verificaría que AppMessage este recibiendo los mensajes de la apliación.

Escribí esto, y funciona sin problemas:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;


type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
  protected
    aCapital,
    aNumLock: ATOM;
    procedure WMHotKey(var Message: TWMHotKey); message WM_HOTKEY;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  WM_CAPITAL = WM_USER + 1;
  WM_NUMLOCK = WM_USER + 2;

procedure TForm1.FormCreate(Sender: TObject);
begin
  aCapital := GlobalAddAtom('WM_CAPITAL');
  aNumLock := GlobalAddAtom('WM_NUMLOCK');
  RegisterHotKey(Handle, aCapital, 0, VK_CAPITAL);
  RegisterHotKey(Handle, aNumLock, 0, VK_NUMLOCK);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(Handle, aCapital);
  UnRegisterHotKey(Handle, aNumLock);
  GlobalDeleteAtom(aCapital);
  GlobalDeleteAtom(aNumLock);
end;

procedure TForm1.WMHotKey(var Message: TWMHotKey);
begin
  if Message.HotKey = aCapital then
      Memo1.Lines.Add('CAPS LOCK');

  if Message.HotKey = aNumLock then
      Memo1.Lines.Add('NUM LOCK');
end;

end.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Hook de Teclado + DLL FeLiXxUcO C++ Builder 12 12-02-2006 19:59:53
Hook global pepelaalfa API de Windows 2 08-12-2005 18:24:27
Hook Roman Con ECO ECO ECO!! marceloalegre Varios 3 03-11-2005 15:43:41
Hook de teclado! marceloalegre Varios 2 17-10-2005 00:59:47
Duda al Hook de Roman :) marceloalegre Varios 4 09-09-2005 17:30:27


La franja horaria es GMT +2. Ahora son las 23:04:04.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi