HOOK其它程序窗体按键

HOOK其它程序窗体按键 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061118224824199.html
unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls;  
   
  type  
      TForm1   =   class(TForm)  
          Edit1:   TEdit;  
          ButtonHook:   TButton;  
          ButtonUnhook:   TButton;  
          Label1:   TLabel;  
          Memo1:   TMemo;  
          procedure   ButtonHookClick(Sender:   TObject);  
          procedure   ButtonUnhookClick(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
      hookHandle:   HHook;  
   
  function   KeyboardCallback(code,   wParam,   lParam:   Integer):   HRESULT;   stdcall;  
   
  implementation  
   
  {$R   *.dfm}  
   
  procedure   TForm1.ButtonHookClick(Sender:   TObject);  
  var  
      threadId:   Integer;  
  begin  
      threadId   :=   StrToInt(edit1.Text);  
      hookHandle   :=   SetWindowsHookEx(WH_KEYBOARD,   @KeyboardCallback,   HInstance,   threadId);  
      if   (hookHandle   =   0)   then  
          ShowMessage('hook   error');  
  end;  
   
  procedure   TForm1.ButtonUnhookClick(Sender:   TObject);  
  begin  
      if   (hookHandle   <>   0)   then   begin  
          UnhookWindowsHookEx(hookHandle);  
          hookHandle   :=   0;  
      end;  
  end;  
   
  function   KeyboardCallback(code,   wParam,   lParam:   Integer):   HRESULT;   stdcall;  
  begin  
      if   wParam   =   WM_KEYDOWN   then   begin  
          if   lParam   =   VK_F1   then   begin  
              Form1.Memo1.Text   :=   'okokok';  
          end;  
      end;  
      Result   :=   CallNextHookEx(hookHandle,   code,   wParam,   lParam);  
  end;  
   
  end.  
  =====================  
  以上是我得代码,晕死,搞了1天没搞明白,进行了HOOK之后在被HOOK窗体按F1就提示程序错误。哪位高手给个代码呀?

我不想搞出个DLL得方法,想使用一个文件。

不用DLL要钩住其他程序的按键,只能用日志钩子。  
  具体用法请看这里:  
  blog.csdn.net/linzhengqun  
  找钩子及其应用。

hookHandle   :=   SetWindowsHookEx(WH_KEYBOARD,   @KeyboardCallback,   HInstance,   threadId);  
  这一行代码,用了HInstance,后面一个参数就要设置为0   ,如果后面一个参数设置为险程ID,那么前一个参数就要设置成0  
   
  下面是正确的  
  hookHandle   :=   SetWindowsHookEx(WH_KEYBOARD,   @KeyboardCallback,   0,   GetCurrentThreadID);  
  hookHandle   :=   SetWindowsHookEx(WH_KEYBOARD,   @KeyboardCallback,   HInstance,   0);

上面的可能还有点不清楚,帮助里面是这么说的  
  hMod  
   
  Identifies   the   DLL   containing   the   hook   procedure   pointed   to   by   the   lpfn   parameter.   The   hMod   parameter   must   be   set   to   NULL   if   the   dwThreadId   parameter   specifies   a   thread   created   by   the   current   process   and   if   the   hook   procedure   is   within   the   code   associated   with   the   current   process.    
   
  dwThreadId  
   
  Specifies   the   identifier   of   the   thread   with   which   the   hook   procedure   is   to   be   associated.   If   this   parameter   is   zero,   the   hook   procedure   is   associated   with   all   existing   threads.

转载于:https://www.cnblogs.com/delphi2007/archive/2008/11/27/1342635.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值