var
HookHandle: HHOOK;function TestHookProc(Code: Integer; WParam: Longint;Msg:Longint): Longint;stdcall;
begin
if PMsg(Msg)^.Message = WM_LBUTTONDOWN then
begin
//进行自己的事件处理
//如何让程序继续对WM_LBUTTONDOWN 的处理?
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
HookHandle:=SetWindowsHookEx(WH_GETMESSAGE,TestHookProc,0,GetCurrentThreadID);
end;WM_LBUTTONDOWN被拦截了, 如何让程序继续对WM_LBUTTONDOWN 的处理?
HookHandle: HHOOK;function TestHookProc(Code: Integer; WParam: Longint;Msg:Longint): Longint;stdcall;
begin
if PMsg(Msg)^.Message = WM_LBUTTONDOWN then
begin
//进行自己的事件处理
//如何让程序继续对WM_LBUTTONDOWN 的处理?
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
HookHandle:=SetWindowsHookEx(WH_GETMESSAGE,TestHookProc,0,GetCurrentThreadID);
end;WM_LBUTTONDOWN被拦截了, 如何让程序继续对WM_LBUTTONDOWN 的处理?
Hook截获的内容,你可以加以处理。
如果没有改动截获的内容的话,他会继续传递给目标对象。
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(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 PMsg(Msg)^.Message = WM_LBUTTONDOWN then
begin
showMessage('已经截获该消息MOUSEDOWN');
//inherited;// 出错
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
HookHandle:=SetWindowsHookEx(WH_GETMESSAGE,TestHookProc,0,GetCurrentThreadID);
end;end.
然后你其他对象里如果有lbbuttondown的事件,它会自己跳到那里去执行
WM_LBUTTONDOWN被拦截了, 程序不再继续对WM_LBUTTONDOWN 进行处理
showMessage('已经截获该消息MOUSEDOWN');