C# WebBrowser禁止F5刷新

在用写一个桌面软件的过程中,用到webbrowser实现界面。这时有一个禁止webbrowser通过f5按键进行刷新的要求。本着边做边学的原则,本菜查了一下百度,原来这么简单,代码如下:

this.webBrowser1.WebBrowserShortcutsEnabled = false;

哈哈,成功了。继续完成接下来的任务,写着写着,发现不对,很不对劲。刚刚那一句代码,不仅把F5这个快捷键禁用了,而且连ctrl+c、ctrl+v这些快捷键一并禁止了。这该如何是好。这时本菜第一反映:键盘钩子。可是转念一想,用了C#还要动用钩子,明显是姿势不对啊。嗯,不到最后万不得已,绝不动用钩子宝典。接下来,本菜已在不归路上越走越远。

走遍了大街,串遍了小巷,翻遍了百度,查遍了google,最后连msdn和open stack都查了个遍。看到各国网友的答案是:很难做到,几乎不可能。(看到坑爹队友不局限在我们身旁)。正当本菜要拿起钩子宝典之时,抱着最后一丝挣扎的希望,翻了一翻webbrowser的函数列表,翻着翻着,顿时眼前一亮,锵锵锵锵:

public class WebBroswer : System.Windows.Forms.WebBrowser
{
        public WebBroswer()
            : base()
        {
        }

        public override bool PreProcessMessage(ref Message msg)
        {
            switch (msg.Msg)
            {
                case ApiCaller.WM_KEYDOWN:
                    int vk = Ptr.PtrToInt(msg.WParam);
                    if (vk == 116) return false;    //钩掉f5
                    break;

            }
            return base.PreProcessMessage(ref msg);
        }
}

本次大法的主要思路是,重载WebBrowser,处理掉F5的键盘消息。(上面代码中的ApiCaller类是一个自定义类,只要判断WM_KEYDOWN即可)

其实在此之前,本菜在WndProc和DefWndProc这两个函数之间折腾很久。一直没转过弯来,WebBrowser的键盘消息WM_KEYDOWN、WM_KEYUP压根儿不会经过这两个函数。因为在这两个函数之前,就分发到内部子控件了。好在及时醒悟,这次完全是吃了没文化的亏,希望这些经历小结,能给大家带来帮助。如果这个知识点对您有用,请继续传播下去。

时间: 2024-10-29 10:46:23

C# WebBrowser禁止F5刷新的相关文章

jquery设置禁止浏览器刷新

代码如下: $(document).bind("keydown", function(e) {//文档绑定键盘按下事件 e = window.event || e;//解决浏览器兼容的问题 if(e.keyCode == 116) {//F5按下 var delIsHidden = $("#delete_pop").is(":hidden"); var notSaveIsHidden = $("#not_save_pop").

C# webbrowser实现真正意义上的F5刷新

关于webbrowser的刷新在C#中有提供方便的方法: webbrowser.refresh(); 但是有时候会发现,不给力啊 那怎么办? 还有一招: webBrowser1.Document.ExecCommand("Refresh",false,null);//真正意义上的F5刷新 要记住啊 哈哈

jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等

禁用鼠标右键菜单栏 $("body").bind("contextmenu", function(event) { return false; }); 禁用快捷键 $("body").bind("keydown",function(e){ e=window.event||e; //禁止空格键翻页 if(event.keyCode==32){ return false; } //屏蔽F5刷新键 if(event.keyCode=

JavaScript阻止浏览器F5刷新

前几天的项目用到一个小功能,用js来阻住用户在键盘上按F5刷新,这个功能不难,主要就是获取键盘事件,如果是按的F5则阻止就好了.话不多说直接上代码. //禁止用F5键 document.onkeydown = function(e){ e = window.event || e; var keycode = e.keyCode || e.which; if(keycode == 116){ if(window.event){// ie try{e.keyCode = 0;}catch(e){}

解决Silverlight F5刷新问题

最近在做一个SL的项目,做完后,遇到一个F5刷新的问题,本人也是第一次接触接触SL项目,记得再ASP.NET浏览器的缓存会自动保存最后一次的浏览记录的. 所以就在网上到处找资料,可惜运气不好,都没找到合适的资料.基本的解决方法都是通过再HTML页面增加JS方法,屏蔽F5刷新按钮的功能,但是这 样的需求并不是我们项目中所要的,还好在BAIDU和群里高手的帮助下,终于大体了解了SL刷新的过程和解决F5刷新返回最后次浏览页面的思想.. 1:SL刷新过程 SL本身就是HTML页面的一个插件程序,在浏览器

在浏览器地址栏按回车、F5、Ctrl+F5刷新网页的区别

转自:http://blog.csdn.net/zoohouse/article/details/7552594 先来说"刷新",它是在你现有页面的基础上,检查网页是否有更新的内容.在检查时,会保留之前的一些变量的值,因此有可能会造成刷新后网页出现错误,或者打不开的情况:"转到"和在地址栏回车,则相当于你重新输入网页的URL访问,这种情况下,浏览器会尽量使用已经存在于本机中的缓存.也就是说,"刷新" 是取网页的新内容来更新本机缓存,在更新的同时保

禁用F5刷新jQuery实例代码

禁用F5刷新jQuery实例代码:F5具有刷新网页的功能,可能有时候需要禁用此功能,下面就通过代码实例介绍一下如何实现此功能.代码如下: $(document).ready(function(){ $(document).bind("keydown",function(e){ var e=window.event||e; if(e.keyCode==116){ e.keyCode = 0; return false; } }) }) 以上代码实现了我们的要求,这里就不多介绍了,具体可以

ASP.NET Web Form和MVC中防止F5刷新引起的重复提交问题

转载  http://www.cnblogs.com/hiteddy/archive/2012/03/29/Prevent_Resubmit_When_Refresh_Reload_In_ASP_NET_Web_Form_MVC.html 什么是刷新/重新载入 IE中的刷新(Refresh),在FF和Chrome中称为重新载入(Reload),与正常进入页面的区别在于以下两点: 1. 缓存控制 如果文件(比如图片)在本地缓存中已经存在,正常进入页面会不访问服务器而直接从本地加载.而对于刷新操作,

JavaScript屏蔽Ctrl+N、Shift+F10、F5刷新、退格键

屏蔽鼠标右键.Ctrl+N.Shift+F10.F5刷新.退格键 function window.onhelp(){return false} //屏蔽F1帮助 function KeyDown(){ if ((window.event.altKey)&&http://www.hrbfc120.com ((window.event.keyCode==37)|| //屏蔽 Alt+ 方向键 ← (window.event.keyCode==39))){ //屏蔽 Alt+ 方向键 → ale