由于特殊原因需要用到Delphi中的鼠标Hook,我在捕获到按钮单击时弹出DLL里的一个Form,但是当这个Form关闭之后,按钮事件似乎没有继续执行了,感觉是Message被杀掉了。我平时不怎么用Delphi,请问这是什么原因呢?应该怎么做呢?下面是大概的代码:
function MouseHook(iCode:integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
var btn:HWND;
begin
if (wParam = WM_LBUTTONDOWN) and (IsMyApp <> 0) then
begin
if IsMyAppButton <> 0 then
begin
if PMOUSEHOOKSTRUCT(lParam)^.hwnd = IsMyAppButton then
begin
myForm1 := TmyForm1.Create(nil);
myForm1.ShowModal;
//MessageBeep(0);
end;
end;
end;
Result := CallNextHookEx(hook,iCode,wParam,lParam);//0;
end;上面代码中,
myForm1 := TmyForm1.Create(nil);
myForm1.ShowModal;
窗口可以弹出来,但是被拦截的消息无法继续下去了。如果改成MessageBeep(0)就可以了。我的目的是要在用户单击按钮的时候弹出一个密码输入窗口。请高手帮助!谢谢!
function MouseHook(iCode:integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
var btn:HWND;
begin
if (wParam = WM_LBUTTONDOWN) and (IsMyApp <> 0) then
begin
if IsMyAppButton <> 0 then
begin
if PMOUSEHOOKSTRUCT(lParam)^.hwnd = IsMyAppButton then
begin
myForm1 := TmyForm1.Create(nil);
myForm1.ShowModal;
//MessageBeep(0);
end;
end;
end;
Result := CallNextHookEx(hook,iCode,wParam,lParam);//0;
end;上面代码中,
myForm1 := TmyForm1.Create(nil);
myForm1.ShowModal;
窗口可以弹出来,但是被拦截的消息无法继续下去了。如果改成MessageBeep(0)就可以了。我的目的是要在用户单击按钮的时候弹出一个密码输入窗口。请高手帮助!谢谢!
这个的问题吧,
if not ProcessMessage(Msg) then Idle(Msg);
hook就是把A-->B改成A-->X-->B。
var btn :HWND;
NeedCreate :Boolean;
begin
NeedCreate := False;
if (wParam = WM_LBUTTONDOWN) and (IsMyApp <> 0) then
begin
if IsMyAppButton <> 0 then
begin
if PMOUSEHOOKSTRUCT(lParam)^.hwnd = IsMyAppButton then
NeedCreate := True;
end;
end;
Result := CallNextHookEx(hook,iCode,wParam,lParam); if NeedCreate then
begin
myForm1 := TmyForm1.Create(nil);
myForm1.ShowModal;
end;
end;
这段代码我试试,请继续关注,我不知道关闭Modal窗口后,被拦截消息是否可以继续。试试先
把 Result := CallNextHookEx(hook,iCode,wParam,lParam);//0; 写到函数的开始即可
你拦截的是WM_LBUTTONDOWN,此时弹出窗口的话,不会再触发WM_LBUTTONUP了,所以无法继续
可以试试ShowModal后再往这个Button发个BM_CLICK消息