then
Result := CallNextHookEx(hHk,nCode,WParam,LParam)//参数是现成的,直接用就可以了。
//详细的说明可以参考Win32 SDK
else if wParam = WM_LBUTTONDBLCLK then //判断是不是鼠标左键双击事件
begin
nState := GetKeyState(VK_CONTROL);//这个函数只有一个参数,就是要得到的键的//键值,这里用Windows的虚拟键值表示ctrl键。
if (nState and $80000000) = $80000000 then//如果按下了,那么返回值的最高位为1
begin //即是16进制的80000000,如果没有按下就返回0
MouseHookStruct := Pointer(LParam);//转换指针并付值给MouseHookStruct变量。
SendMessage(MouseHookStruct.hwnd,WM_PASTE,0,0);//如果条件都满足了就发送WM_PASTE(粘贴)消息
end;
end;
end;
function EnableMouseHook:Boolean; stdcall; export;
begin
if hHk = 0 then //为了安全,必须判断一下再设置钩子。
Begin
//第三个参数的Hinstance 在Delphi中有定义,用就可以了。第四个参数必须为0
hHk := SetWindowsHookEx(WH_MOUSE,@MouseHookProc,Hinstance,0);
Result := True;
end
else
Result := False;
end;
function DisableMouseHook:Boolean; stdcall; export;
begin
if hHk <> 0 then //如果有钩子就卸掉它。
begin
UnHookWindowsHookEx(hHk);
hHk := 0;
Result := True;
end
else
Result := False;
end;
end.
三、使用钩子的应用程序的工程文件
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
...
四、使用钩子的
应用程序代码
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, RxHook;
type
TForm1 = class(TForm)
Button1: TButton;//放上两个Button和一个Edit控键用来试用我们的钩子函数。
Button2: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
//下面是调用hookprj.dll中的函数。
function EnableMouseHook:Boolean; stdcall; external 'Hookprj.dll' name 'EnableMouseHook';
function DisableMouseHook:Boolean; stdcall; external 'Hookprj.dll' name 'DisableMouseHook';
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
if EnableMouseHook then
ShowMessage('启动钩子成功');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if DisableMouseHook then
ShowMessage('停止钩子成功');
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//这里调用是必需的,否则有可能没有卸载钩子就退出了,那就不好了。
DisableMouseHook;
end;
end;