首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

钩子的一个初级有关问题,

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

钩子的一个初级问题,请指教!
界面上只有一个按键,一个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或者空字符消息过去

热点排行