在用写一个桌面软件的过程中,用到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替换APP字体 — Typeface

    Android替换APP字体 — Typeface APP字体的思路一般都会想到自定义控件(TextView.EditView),但是项目中会有很多种控件,就算用也会承担一些风险和资源的消耗,主要是这 ...

  2. 创建 OVS vlan100 netwrok - 每天5分钟玩转 OpenStack(137)

    上一节完成了 OVS vlan network 的配置准备工作,今天我们创建 vlan100.打开菜单 Admin -> Networks,点击 "Create Network&quo ...

  3. TCP报文中的SYN,FIN,ACK,PSH,RST,URG

    TCP的三次握手是怎么进行的:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手:接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发 ...

  4. ruby web性能响应时间

    可以统计单个web页面加载时间. require 'watir-webdriver' require 'watir-webdriver-performance' b = Watir::Browser. ...

  5. hdu1039

    #include<stdio.h>#include<string.h>const int MAXN=200;char str[MAXN]; bool isvowel(char ...

  6. Transform.TransformDirection 变换方向

    官方描述: JavaScript ⇒ TransformDirection(direction: Vector3): Vector3; C# ⇒ Vector3 TransformDirection( ...

  7. 中国IT武林大会暨中国首席技术官2016年度人物颁奖盛典概况

    在"大众创业.万众创新"的互联网时代,深入实施创新驱动发展战略,建设创新型国家,必须大力推动"互联网+科技"的发展.由中国首席技术官联盟.CCTV证券频道< ...

  8. Sipdroid实现SIP(五): 用Java实现的UserAgent

    I. 概述 UserAgent是SIP协议中的一个概念, 将"打电话"功能中的主叫和被叫逻辑上封装成UserAgent, 就像将"注册"功能的发起方和接收方封装 ...

  9. magento获取ip地址

    Mage::helper('coreservice')->getRequestIp()获取IP地址

  10. C#文件处理

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...