Hook GetMessage

本文介绍了一种通过设置WH_GETMESSAGE钩子来捕获ESC按键的方法,并展示了如何使用Delphi代码实现这一功能。文中提供了具体的钩子过程函数TestHookProc的实现细节,包括响应ESC按键并关闭窗体的操作。

Hook GetMessage

 

代码
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
const
WM_TestMessage
= WM_USER + 2000;
type
TForm1
= class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
var
HookHandle: HHOOK;

function TestHookProc(Code: Integer; WParam: Longint;Msg:Longint): Longint;stdcall;
begin
if (Code = HC_ACTION) then
if PMsg(Msg)^.Message = WM_TestMessage then
begin
showMessage(
'已经截获该消息');
end;
Result :
= CallNextHookEx(HookHandle, Code, WParam, Longint(@Msg));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
HookHandle:
=SetWindowsHookEx(WH_GETMESSAGE,@TestHookProc,0,GetCurrentThreadID);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnhookWindowsHookEx(HookHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(self.Handle,WM_TestMessage,
0,0);
//SendMessage(self.Handle,WM_TestMessage,0,0);
//这里用SendMessage是不行的,具体见相关资料
end;

end.

Catch ESC Key

代码
var
Form1: TForm1;
HookHandle:HHook;
const
WM_TestMessage
= WM_USER + 2000;

implementation
{$R *.dfm}

function TestHookProc(Code:Integer;WParam:Longint;LParam:Longint):Longint;stdcall;
begin
if PMsg(LParam)^.Message = WM_KEYDOWN then
if PMsg(LParam)^.wParam = VK_ESCAPE then
begin
Showmessage(
'ESC Key Down!');
Form1.Close;
end;
Result:
=CallNextHookEx(HookHandle,Code,WParam,Longint(@LParam));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
HookHandle:
=SetWindowsHookEx(WH_GETMESSAGE,TestHookProc,0,GetCurrentThreadID);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnHookWindowsHookEx(HookHandle);
end;

 

 

转载于:https://www.cnblogs.com/Jekhn/archive/2010/12/21/1912800.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值