在用写一个桌面软件的过程中,用到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. [ios3-地图] 如何在iOS地图上高效的显示大量数据 [转]

    [转至:http://blog.csdn.net/pjk1129/article/details/17358337] 原文:How To Efficiently Display Large Amoun ...

  2. SqlServer创建数据表描述及列描述信息

    SqlServer创建数据表描述及列描述信息 Intro Q: 为什么要创建描述信息? A: 鼠标悬停在对应表和列上时,会出现描述信息,可以提高工作的效率,借助工具我们根据数据表可以生成Model,可 ...

  3. 《CLR Via C#》读书笔记,持续更新...

    写了快5年代码了,一直都是使用别人发明的语言,别人发明的框架做快速开发,还从来没有真正深刻的学习过底层的一些东西,于是今年我打算读<CLR Via C#>这本书,认识一下C#的底层,我觉得 ...

  4. 【CSS学习笔记】背景图片

    直接看代码: background: blue; /*页面背景为蓝色,很简单的代码*/background-image:url(small.jpg); /*页面背景是名字叫small.jpg的图片*/ ...

  5. iOS设置UITableView中Cell被默认选中后怎么触发didselect事件

    //默认选中某个cell [self.searchResultTV selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] a ...

  6. LaTeXの学习笔记

    听说LaTeX挺有趣,决定学习一下提升自己的境(逼)界(格),借鉴了许多大神的经验与笔记,希望能坚持下去......(* ̄;( ̄ *) 1.论文写作的三种格式 eg. \documentclass{a ...

  7. .Net异步函数存在的限制

    本文摘录自CLR Via C# 第四版. 异步函数存在以下限制: 1.不能讲应用程序的Main方法转变成异步函数.另外,构造器.属性访问器方法和时间访问器方法不能转变成异步函数. 2.异步函数不能使用 ...

  8. express 4.x 文件上传

    1.安装文件上传模块: npm install multiparty --save 2.在routes/index.js 中添加: // 引用模块 let multiparty = require(& ...

  9. QQSpamerUpdate

    2.00001,0,http://oia5k1lqi.bkt.clouddn.com/QQSpamer2.0%20BETA1.exe

  10. Batch File Rename Utility(文件批量改名软件) 1.1.4231

    软件名称: Batch File Rename Utility(文件批量改名软件) 1.1.4231.23098 软件语言: 英文 授权方式: 免费软件 运行环境: Win7 / Vista / Wi ...