读书人

钩子的一个初级有关问题

发布时间: 2012-02-12 17:16:33 作者: rapoo

钩子的一个初级问题,请指教!
界面上只有一个按键,一个EDIT(PassWordChar属性设成了*)
代码如下

function TestHookProc(Code: Integer; WParam: Longint;Msg:Longint): Longint;stdcall;
begin
if (Code = HC_ACTION) then
if PMsg(Msg)^.Message = EM_SETPASSWORDCHAR 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.Button1Click(Sender: TObject);
begin
PostMessage(Edit1.Handle,EM_SETPASSWORDCHAR,0,0);
end;


现在情况是,我点了按钮之后,会提示消息被拦截,但是EDIT也收到了消息(点击EDIT就能看到里面的内容了)
而把CallNextHookEx注释掉,或者直接强制把result赋为1,也都能杀不到这个消息

请问,如何让这个消息传不到EDIT呢?

[解决办法]
WH_GETMESSAGE 不能阻断消息,但是可以修改消息
你可以把消息号改成WM_NULL
[解决办法]
直接把消息截获之后发送一个WM_Null或者空字符消息过去

读书人网 >.NET

热点推荐