如何屏蔽TWebBrowse中IE的右键菜单(200分)

  • 主题发起人 主题发起人 proman
  • 开始时间 开始时间
P

proman

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠:
本人用TWebBrowse显示一些Html代码的内容,我不希望用户可以在其中点击右键时弹出IE的右键菜单,请问应该如何做呢?
本人急需,谢谢.
 
这个应该可以的,不是我写的,是收集的。可惜当初没有保存链接。

var
HookID: THandle;

function MouseProc(nCode: Integer
wParam, lParam: Longint): Longint
stdcall

var
szClassName: array[0..255] of Char

const
ie_name = 'Internet Explorer_Server'

begin
case nCode < 0 of
True:
Result := CallNextHookEx(HookID, nCode, wParam, lParam)
else
case wParam of
WM_RBUTTONDOWN,
WM_RBUTTONUP:
begin
GetClassName(PMOUSEHOOKSTRUCT(lParam)^.HWND, szClassName, SizeOf(szClassName))

if lstrcmp(@szClassName[0], @ie_name[1]) = 0 then
Result := HC_SKIP
else
Result := CallNextHookEx(HookID, nCode, wParam, lParam)

end
else
Result := CallNextHookEx(HookID, nCode, wParam, lParam)

end

end

end


procedure TForm1.FormCreate(Sender: TObject);
begin
HookID := SetWindowsHookEx(WH_MOUSE, MouseProc, 0, GetCurrentThreadId());
end


procedure TForm1.FormDestroy(Sender: TObject)

begin
if HookID <> 0 then
UnHookWindowsHookEx(HookID)

end


procedure TForm1.Button1Click(Sender: TObject)

begin
Webbrowser1.Navigate('http://www.google.com')

end;
 
嗯,好象是可以,不过不是我要的结果啊.因为连我自己的右键菜单也弹不出来了.
请各位大侠继续指点.
 
哈哈,是吗?你自己还要弹出菜单,那就不好办了,
在下面这句话的前面的判断里面做文章吧。
Result := HC_SKIP
 
是啊,我本来是想IE总有一个方法可以设为不弹出右键菜单的吧.否则是不是太霸道了.
 
你是不是要使用自己的右键菜单替代IE自己的弹出菜单?
 
是啊,如果能知道鼠标点击处的信息就更好了,当然这个难度大,现在我能挡住IE的菜单,弹出自己的菜单,可是总觉得用Hook的方法不是很好.
 
刚才我试验了一下,没有加上Hook的代码,也没有办法弹出你自己定义的菜单呀?
 
是的,只有加上了Hook才能弹出自己的菜单.
 
你的Hook的代码贴上来好吗?估计修改一下就可以了。。。
 
Result := HC_SKIP;
Form1.PopupMenu1.Popup(10,19);

就加了这一句
 
其实这个用不着 Hook 的

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage:=AppMsg;
end;

procedure TForm1.AppMsg(var Msg: TMsg
var Handled: Boolean);
begin
if IsChild(WebBrowser1.Handle,Msg.hwnd) and ((Msg.message=WM_RBUTTONUP)) then
begin
Handled:=True;

if Assigned(WebBrowser1.PopupMenu) then
WebBrowser1.PopupMenu.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y);
end;
end;
 
确实不错,不过和使用Hook有同样的一个问题,都是不能阻止住键盘上的那个Windows右键。
总感觉截获鼠标右键似乎是不得已的办法。
不知道是否有能够截获右键菜单弹出的方法。
 
要屏蔽键盘上的那个右键也不难啊
if IsChild(WebBrowser1.Handle,Msg.hwnd) and ((Msg.message=WM_RBUTTONUP) or
((Msg.message=WM_KEYUP) and (Msg.wParam=VK_APPS))) then
//加上键盘上右键消息的处理就可以了
 
这种是外在的方法,没有从IE本身下手的方法吗?
 
<body oncontextmenu="return false"> 那么也不会弹出菜单[:)]
 
这个方法也是可以的啊,呵呵.
 
多人接受答案了。
 

Similar threads

回复
0
查看
819
不得闲
S
回复
0
查看
832
SUNSTONE的Delphi笔记
S
S
回复
0
查看
790
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部