怎么样禁止Twebbrowser本身的快捷键?
就是使TWwebbrowser的快捷键如F5刷新网页,ctrl+N打开新网页失效!
[解决办法]
IDocHostUIHandler中有一个TranslateAccelerator方法
// 屏蔽Ctrl+Nfunction TCustomEmbeddedWB.DoFilterMsg(const lpMsg: PMSG): HRESULT;begin Result := S_FALSE; if (lpMsg^.message = WM_KEYDOWN) and (GetKeyState(VK_CONTROL) < 0) then begin if 'N' = Char(lpMsg.wParam) then begin Result := S_OK; end; end;end;function TranslateAccelerator(const lpMsg: PMSG; const pguidCmdGroup: PGUID; const nCmdID: DWORD): HRESULT;begin Result := DoFilterMsg(lpMsg);end;
[解决办法]
procedure TForm2.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var
mPoint: TPoint;
const
_KeyPressMask = $80000000;
begin
//屏蔽右键菜单
// with Msg do
// begin
// if not IsChild(WebBrowser1.Handle, hWnd) then Exit;
// Handled := (message = WM_RBUTTONDOWN) or (message = WM_RBUTTONUP) or (message = WM_CONTEXTMENU);
// end;
//替换右键菜单
if IsChild(WebBrowser1.Handle, Msg.Hwnd) and
((Msg.Message = WM_RBUTTONDOWN) or (Msg.Message = WM_RBUTTONUP)) then
begin
GetCursorPos(mPoint); //得到光标位置
PopupMenu1.Popup(mPoint.X, mPoint.Y); //弹出popupmenu1的菜单
Handled:=True;
end;
//禁止Ctrl + N
//禁止Ctrl + F
//禁止Ctrl + A
if Msg.message = WM_KEYDOWN then
begin
if ((Msg.lParam and _KeyPressMask) = 0) and
(GetKeyState(VK_Control) <0) and ((Msg.wParam = Ord('N'))
or (Msg.wParam = Ord('F')) or (Msg.wParam = Ord('A'))) then
begin
Handled := True;
end;
end;
end;