如何在TwebBrowser中屏蔽鼠标右键?(60分)

  • 主题发起人 主题发起人 cbuilder
  • 开始时间 开始时间
C

cbuilder

Unregistered / Unconfirmed
GUEST, unregistred user!
一个思路:
截取WM_NCHITTEST, 判断x, y 与是否RButtonDown, 如果是, 则将result
改成HTERROR或者HTNOWHERE.
 
这个东西烦,但是又那么好用的....矛盾呀。
它的鼠标的右键有时拷贝不上,源程序也没的修改。
有没有与这个差不多的构件?当然要右源代码.
 
好象没有:-(
 
呵呵,如果哪个控件的功能能赶上TWebBrowser,早就自己开发浏览器了.:-)
 
呵呵,没人来讨论啊,是不是分数太少啊?呵呵,我想这个问题好久了,...
如果实在没有答案,十天后我们就把分数分了吧,8=)
Another_eYes:我回去再试一下你的方法,我觉得在webbrowser中,好难拦截消息!
 
to cbuilder:
我试了一下eyes的方法,用rxwindowhook截取了webbrowser的wm_nchittest,
发现当webbrowser出始化之后不行,我用全局的mouse钩子可以,局部的钩子没试
应该也可以。
 
hubdog:可以具体一些吗?
 
我写了一个mouse钩子的dll,当有mouse动作的时候,会把mouse信息存到共享内存,
同时会给我写的控件sendmessage,控件接到消息,到共享内存中取信息,判断是否
在webbrowser里及是否右键,若是则对sendmessage返回结果,钩子函数修改 mouse
信息中MOUSEHOOKSTRUCT中的wHitTestCode=HTNOWHERE,再传给webbrowser.
我只实验了当mouse在webbrowser上有动作时,我的控件能接到消息,并没有去改
它,我想用局部钩子应该更简单。
 
用application的onmessage不行吗?

if (Msg.message=wm_rbuttondown)or(Msg.message=wm_rbuttonup))and (鼠标是否在webbrower内)then begin
Handled:=true;
end;
 
to menxin:
可以,我发现问题出在不能用截取wm_nchittest这个消息来处理这个问题。
 
to cbuilder: 你知道如何得到TWebBrowser内选中的文本信息吗?
如: StringList.Text := 选中TWebBrowser中的内容。
 
加100分,请继续讨论这个问题。
To MicroZeng:我感觉到了webbrowser里面,一切都失去控制了,(我刚开始学习
使用这个东东,)55555......我没有什么好方法,不知你有没有好的办法。

对了,为什么在webbrowser中用右键经常会弹出“正在使用要像的资源”的错误
对话框,特别是在查看页面属性时?

 
在HTML中加
<script language="JavaScript">
<!--
function click()
{
if (event.button==2)
{
alert('请点鼠标左键.');
}
};
//-->
</script>
 
终于可以进来了!
hubdog,可以给我看看你的hook源代码吗?
 
不用了,用menxin的方法就可以,用不着钩子
if (Msg.message=wm_rbuttondown)or(Msg.message=wm_rbuttonup))and (鼠标是否在webbrower内)then begin
Handled:=true;
end;

 
Hubdog,可否把Hook代码给我一份(我不知该怎么写这个)?我另开一个问题,来拿
分吧!用menxin的方法可以解决问题!谢谢各位!
my e_mail:lyqeast@263.net
 
多人接受答案了。
 
后退
顶部