TWebBrowser中怎样才能屏蔽掉右键呢?(100分)

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

crystal

Unregistered / Unconfirmed
GUEST, unregistred user!
使用TWebBrowser的时候,不想让用户使用右键弹出那个菜单,于是想屏蔽右键,我该怎么
做呢?
我试过继承一个类然后截获message handle,不行,用setwindowlong的GWL_WNDPROC替换
也不行,请各位高人指点小弟一下.

WinSight可以看到是有WM_RBUTTONDOWN/UP消息的,但是消息是发给Internet Explorer_
Server的,我想它是不是TWebBrowser的一个Child,但是用FindWindowEx查不到它,怎么办
好呢? :(
 
我也想知道。
 
TWebBrowser应有onkeydown事件把,在事件中,先判断是什么键按下,
如果是右键,则用postmessage向TWebBrowser发送一个左键按下的消息就可以 了
 
to micony,当TwebBrowser打开某罔页后好像就不行了,
你有没有成功的代码?
我现在用的是在html里面加入内容,禁用右键和键盘的功能建菜单.






 
我也想知道.
 
哈哈,刚刚才回答了这个问题,再贴一次
这个很容易啊,只要在程序中生成一个mouse hook就行了,在mouseProc里面处理
鼠标右键消息,随便干什么都成,如果不做什么的话,直接返回就可以把IE的右键
给屏蔽掉了。
随便写了个VC的鼠标钩子程序,参照着看看吧。
LRESULT CALLBACK MouseProc(int code, WPARAM wParam, LPARAM lParam);
HHOOK MouseHook;
//生成鼠标钩子
MouseHook=SetWindowsHookEx(WH_MOUSE,MouseProc,AfxGetApp()->m_hInstance,AfxGetApp()->m_nThreadID );
//钩子的处理函数
LRESULT CALLBACK MouseProc(int code, WPARAM wParam, LPARAM lParam)
{

if ( (code == HC_ACTION) &&amp
(wParam == WM_RBUTTONDOWN) )
{
::AfxMessageBox("ok");
}

CallNextHookEx(MouseHook,code,wParam,lParam);
return 0;

}
程序退出别忘了销毁钩子
UnhookWindowsHookEx(MouseHook);

 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
OleCtrls, SHDocVw;

type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure mymessage(var msg:tmsg;var handled:boolean);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure tform1.mymessage(var msg:tmsg;var handled:boolean);
var
p:tpoint;
thename:array [0..255] of char;
begin
if (msg.message=wm_rbuttondown) then
begin
getcursorpos(p);
getclassname(windowfrompoint(p),thename,255);
if thename='Internet Explorer_Server' then
handled:=true;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
application.OnMessage:=mymessage;
form1.WebBrowser1.Navigate('www.263.net');
end;

end.
 
我想这种东西用WEBBROWSER所提供的COM接口实现比较好吧.
 
在ShowContextMenu设置就可以了
 
to micony:没有吧?就算有,也不会因为右键按下被触发吧?
to lww:谢谢你,各种拦截消息的方法里面,我没有进行尝试的只有HOOK了,没想到没试的
正是可以的.
to xiao_min:您试了吗?我这样做过不行,还请指教.
to liguang:愿闻其详...
to 宁采臣:能具体点吗?BTW:你是blueidea里的宁采臣吗?
 
我试过了,是成功了,直接从DELPHI中COPY过来的
 
to xiao_min:
抱歉我刚才没仔细看,你的是用Application.Onmessage处理的,这种方法我忘了试 :P
多谢了
 
这个我答过

http://www.delphibbs.com/delphibbs/dispq.asp?lid=481728
 
我倒,先搜一下就好了 :)谢谢unreal大虾
再等一下liguang和宁采臣的答复...
 
unreal:也发一个给我,好吗?谢谢!
dana@shd.com.cn
 
哎,算了,不等了,多人接受答案了,谢谢大家!
 
多人接受答案了。
 
后退
顶部