【发布时间】:2023-03-15 08:21:01
【问题描述】:
我有一个 WPF 应用程序,它将在信息亭、带有触摸屏的 PC 上运行。该应用程序以全屏模式运行,以隐藏操作系统。在我的一个页面上,我有一个 WebBrowser 控件,允许用户查看一些网页(导航仅限于某些页面)。 由于计算机将放置在公共场所,因此我不能让用户访问操作系统。问题是,触摸屏允许在网络浏览器上单击鼠标右键,这最终导致任务栏出现......不好......!
过去几天我一直在尝试禁用该上下文菜单,但没有取得多大成功。基本上我现在的位置是:
-
添加了对 SHDocVw.dll 的 COM 引用以获取 IWebBrowser2 接口(需要禁用新窗口的启动。
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [Guid("6d5140c1-7436-11ce-8034-00aa006009fa")] internal interface IServiceProvider { [return: MarshalAs(UnmanagedType.IUnknown)] object QueryService(ref Guid guidService, ref Guid riid); } static readonly Guid SID_SWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046"); -
获取 IWEBBrowser2 接口
IServiceProvider _serviceProvider = null; if (_browser.Document != null) { _serviceProvider = (IServiceProvider)_browser.Document; Guid _serviceGuid = SID_SWebBrowserApp; Guid _iid = typeof(SHDocVw.IWebBrowser2).GUID; SHDocVw.IWebBrowser2 _webBrowser = (SHDocVw.IWebBrowser2)_serviceProvider.QueryService(ref _serviceGuid, ref _iid); -
并尝试禁用文档上的 oncontextmenu。
HTMLDocument doc = _webBrowser.Document as HTMLDocument; mshtml.HTMLDocumentEvents2_Event ev = doc as mshtml.HTMLDocumentEvents2_Event; ev.oncontextmenu += (arg) => { return false; };
到目前为止,没有成功...有什么想法吗?
提前致谢。
【问题讨论】:
-
如果完全禁用右键单击不是问题,请查看stackoverflow.com/questions/4412915/…
标签: c# .net wpf com-interop