在用写一个桌面软件的过程中,用到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 == ) return false; //钩掉f5
break; }
return base.PreProcessMessage(ref msg);
}
}

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

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

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

  1. js禁止页面刷新禁止用F5键刷新,禁止右键

    <script     language="javascript"> //禁止用F5键 function     document.onkeydown() { if   ...

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

    关于webbrowser的刷新在C#中有提供方便的方法: webbrowser.refresh(); 但是有时候会发现,不给力啊 那怎么办? 还有一招: webBrowser1.Document.Ex ...

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

    禁用鼠标右键菜单栏 $("body").bind("contextmenu", function(event) { return false; }); 禁用快捷 ...

  4. javaScript阻止浏览器F5刷新

    1 <script type="text/javascript"> 2 //禁止用F5键 3 document.onkeydown = function (e) { 4 ...

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

    不少同学问,不都是刷新吗?还有什么区别?其实,还是有的. 其中,在地址栏按回车又分为两种情况.一是请求的URI在浏览器缓存中未过期,此时,使用Firefox的firebug插件在浏览器里显示的HTTP ...

  6. 电脑的f5刷新不了

    新买的电脑,f5刷新不了页面,网上查了后发现是fn功能键的原因.同时fn+f5即可刷新.可是依然感觉好别扭... 按下fn+esc,再只按f5,就可以刷新页面了.神奇...

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

    转:http://www.cnblogs.com/mofish/archive/2012/06/08/2541604.html 不少同学问,不都是刷新吗?还有什么区别?其实,还是有的. 其中,在地址栏 ...

  8. jQuery 中屏蔽浏览器的F5刷新功能

    //支持ie(6,7,8),火狐,谷歌,opera,等主流浏览器 $(document).keydown(function(e){ e=window.event||e; if(e.keyCode==1 ...

  9. jquery禁用右键单击功能屏蔽F5刷新

    1.禁用右键单击功能$(document).ready(function() { $(document).bind("contextmenu",function(e) { aler ...

随机推荐

  1. 在android里用ExpandableListView实现二层和三层列表

    转载自http://www.cnblogs.com/nuliniaoboke/archive/2012/11/13/2767957.html 二层列表是直接用androidAPI中的Expandabl ...

  2. php 写商城网站的总结吧

    ---恢复内容开始--- 在兄弟连培训,这半个月在做一期项目,期间学到了很多东西,可是还有好多没有学会灵活运用.今天在登录界面加入验证码的时候,form提交不过去input里面的验证码,session ...

  3. 配置supervisor 让laraver的队列实现守护进程

    1,安装: #brew install supervisor 默认会安装在/usr/local/Cellar/supervisor目录 2,在etc下面新建supervisor.conf 文件,复制下 ...

  4. NodeJS 实现 客户端 js 加密

    NodeJS 实现 客户端 js 加密 思路: 服务端渲染业务代码js => 前后端约定加密算法 => 业务代码进行签名 => 客户端解密业务代码 => eval 执行 Nod ...

  5. HTML5之Audio音频标签学习

    HTML5中的新元素标签 src:音频文件路径. autobuffer:设置是否在页面加载时自动缓冲音频. autoplay:设置音频是否自动播放. loop:设置音频是否要循环播放. control ...

  6. open live writer下载安装

    以前记笔记都是用Evernote,啥都记在上面.除了学习工作的以外,还有各种账号密码啦(这个真心有必要,再也不用各种试了),妈妈要我帮她下载的广场舞名字啦,我双十一要剁手的东西啦等等.很好用的,推荐! ...

  7. 常用的meta标签总结

    <!-- 关键字,搜所引擎 SEO --><meta http-equiv="keywords" content="关键字1,关键字2,..." ...

  8. Form 提交表单

    ---HTML <form action="/Sample/SampleList/ExportSample" style="display:inline" ...

  9. php学习笔记——CSS缓存问题

    PHP也没学多久,在工作中遇到了一个问题,先来记录一下. 问题描述: 同一项目里面的不同模块对应了不同的网站,但是两个网站用的文件名以是同一规范的,最后导致了两个网站css文件同名,在打开了网站A后去 ...

  10. InnoDB与MyISAM引擎区别

    mysql中InnoDB与MyISAM两种数据库引擎的区别: 一.InnoDB引擎: 1.支持事务性, 2.支持外部键, 3.行级锁, 4.不保存表的具体行数,执行select count(*) fr ...