Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-02-2017
ANCELMO ANCELMO is offline
Miembro
 
Registrado: nov 2016
Posts: 22
Poder: 0
ANCELMO Va por buen camino
ayuda explicaxion de hook

alguno me podria ayudar como hacer un hook que solo me capture el clic derecho ctrl+p y ctrl+g
Responder Con Cita
  #2  
Antiguo 06-02-2017
Avatar de noshy
noshy noshy is offline
Miembro
 
Registrado: jul 2003
Posts: 139
Poder: 21
noshy Va por buen camino
Hola, en este hilo puedes encontrar la respuesta:

https://www.clubdelphi.com/foros/showthread.php?t=45462

Saludos
__________________
\_--> NoShY <--_/
Responder Con Cita
  #3  
Antiguo 07-02-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
En una primera aproximación podemos escribir el siguiente código que responde a las pulsaciones y en el orden impuesto:
Ctl + RBUTTON + G ó RBUTON + Ctl + G
y
Ctl + RBUTTON + P ó RBUTON + Ctl + P

Código Delphi [-]
procedure TForm1.HotKey(var Message: TMessage);
begin
 if (GetAsyncKeyState(VK_RBUTTON) and $8000) <> 0 then
 begin
    if Message.WParam = 0 then
      Windows.Beep(2000, 200);
    if Message.WParam = 1 then
      Windows.Beep(1000, 200);
 end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Handle, 0, MOD_CONTROL, Ord('P'));
  RegisterHotKey(Handle, 1, MOD_CONTROL, Ord('G'));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  UnregisterHotKey(Handle, 0);
  UnregisterHotKey(Handle, 1);
end;

Saludos.

Última edición por escafandra fecha: 07-02-2017 a las 00:58:31.
Responder Con Cita
  #4  
Antiguo 07-02-2017
ANCELMO ANCELMO is offline
Miembro
 
Registrado: nov 2016
Posts: 22
Poder: 0
ANCELMO Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
En una primera aproximación podemos escribir el siguiente código que responde a las pulsaciones y en el orden impuesto:
Ctl + RBUTTON + G ó RBUTON + Ctl + G
y
Ctl + RBUTTON + P ó RBUTON + Ctl + P

Código Delphi [-]
procedure TForm1.HotKey(var Message: TMessage);
begin
 if (GetAsyncKeyState(VK_RBUTTON) and $8000) <> 0 then
 begin
    if Message.WParam = 0 then
      Windows.Beep(2000, 200);
    if Message.WParam = 1 then
      Windows.Beep(1000, 200);
 end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Handle, 0, MOD_CONTROL, Ord('P'));
  RegisterHotKey(Handle, 1, MOD_CONTROL, Ord('G'));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  UnregisterHotKey(Handle, 0);
  UnregisterHotKey(Handle, 1);
end;

Saludos.

quisiera saber donde llamar el procedimiento HotKey lo que queda registrado en RegisterHotKey
Responder Con Cita
  #5  
Antiguo 07-02-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
La API RegisterHotKey registra una ventana, en este caso nuestro formulario, para que Windows le envíe un mensaje WM_HOTKEY. Se puede registrar cualquier tecla con un modificador (MOD_ALT, MOD_CONTROL, MOD_SHIFT ó MOD_WIN) en este caso he usado MOD_CONTROL. No puedes registrar botones del ratón. Para recibir el mensaje debes implementar un procedimiento que lo haga, en este caso lo llamé HotKey y se encarga de procesar el mensaje WM_HOTKEY. Cada tecla registrada tiene un ID con el que la registras, en este caso 0 para 'P' y 1 para 'G'. HotKey se entera del ID porque le llega en Message.WParam, con lo que ya sabemos que tecla lo disparó.

Para controlar si se pulsó el botón derecho del ratón usamos GetAsyncKeyState(VK_RBUTTON). Al realizar una operación and binaria con $8000 sabremos si el botón esta pulsado pues en ese caso el resultado será distinto de 0.

Para terminar, debes anular el registro de las teclas con la API UnregisterHotKey, una llamada por cada tecla registrada usando el identificador que usaste al registrarlas. Esto se puede hacer al finalizar el formulario o cuando ya no precises que tu formulario siga respondiendo al mensaje WM_HOTKEY.

Este sería el código completo de la Unit:
Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    procedure HotKey(var Message: TMessage); message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  hMouseHook: HHOOK = 0;

implementation

{$R *.dfm}

procedure TForm1.HotKey(var Message: TMessage);
begin
 if (GetAsyncKeyState(VK_RBUTTON) and $8000) <> 0 then
 begin
    if Message.WParam = 0 then   // Ctl + P + VK_RBUTTON
      Windows.Beep(2000, 200);
    if Message.WParam = 1 then   // Ctl + G + VK_RBUTTON
      Windows.Beep(1000, 200);
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Handle, 0, MOD_CONTROL, Ord('P'));   // Ctl + P
  RegisterHotKey(Handle, 1, MOD_CONTROL, Ord('G'));   // Ctl + G
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  UnregisterHotKey(Handle, 0);
  UnregisterHotKey(Handle, 1);
end;

end.

Yo he utilizado un sonido para mostrar que se detectan las combinaciones de teclas + RBUTTON pero tu deberás poner el código que te parezca.


Saludos.
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 a la API Createprocess l30 API de Windows 20 06-04-2014 03:38:29
Hook a la API GetClipboardData escafandra C++ Builder 0 16-09-2008 19:54:44
Hook de Teclado + DLL FeLiXxUcO C++ Builder 12 12-02-2006 19:59:53
Hook de teclado! marceloalegre Varios 2 17-10-2005 00:59:47
Ayuda con Windows Hook!! COCOL API de Windows 0 18-02-2005 22:51:09


La franja horaria es GMT +2. Ahora son las 22:10:11.


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