zoukankan      html  css  js  c++  java
  • 使用windows函数SetWindowsHookEx实现键盘钩子

    unit Unit1;

    interface

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

    type
    TForm1 = class(TForm)
    Edit1: TEdit;
    RzSpinEdit1: TRzSpinEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    end;

    {声明键盘钩子回调函数; 其参数传递方式要用 API 的 stdcall}
    function KeyHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    var
    hook: HHOOK; {定义一个钩子句柄}

    {实现键盘钩子回调函数}

    function KeyHook(nCode: Integer; wParam: wParam; lParam: lParam): LRESULT;
    begin
    if (wParam = 65) then
    Form1.Edit1.Text:=IntToStr(strtoint(Form1.Edit1.Text)+1);
    Result := CallNextHookEx(hook, nCode, wParam, lParam);
    end;

    {设置键盘钩子}
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    hook := SetWindowsHookEx(WH_KEYBOARD, @KeyHook, 0, GetCurrentThreadID);
    end;

    {释放键盘钩子}
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    UnhookWindowsHookEx(hook);
    end;

    end.

  • 相关阅读:
    linux 网络相关
    工作随笔
    python
    trouble-shooting
    MySQL常见问题总结
    根据 Request 获取客户端 IP
    文件上传按钮优化
    Linux中RabbitMQ安装
    linux 完全卸载MySQL
    Linux 下安装 MySQL-5.7.24
  • 原文地址:https://www.cnblogs.com/zyb2016/p/11471137.html
Copyright © 2011-2022 走看看