退出屏保前玩一把游戏吧!webBrowser中网页如何调用.NET方法

2023-11-10

本文主要以 HackerScreenSaver 新功能的开发经历介绍 webBrowser中网页如何调用.NET方法的过程。

1. 背景

之前开源了一款名为 HackerScreenSaver 的 Windows 屏保程序。该程序具有模拟黑客炫酷界面的特点,用户可以将自定义的网页作为锁屏界面。不久前,有网友提出一个有趣的需求:能否在退出屏保时需要输入密码?虽然我不太清楚他的用意,但这个其实可以安排,不过需要变通一下。

2. 新功能设计

之前做这个程序的时候我就发现,屏幕保护程序需要自己处理退出,如果屏保程序设计得不够合理,可能会导致用户在无法正常退出屏保时遇到困扰。所以在设计之初,我添加了 MouseKeyHook 用来监听全局的键鼠事件。

那么设计新的功能来实现网友的需求也很简单,当然不是直接的设计什么密码输入,然后判断退出的功能。这里只需将屏保退出的功能提供给网页控制就可以了。

请添加图片描述

3. 网页与 .NET 交互

之前介绍到为了程序简易软件采用了 webBrowser,那么为了让网页可以决定什么时候退出屏保,就需要让 webBrowser 中的网页可以调用 .NET 的方法。

在网页中,我们需要在屏保退出的逻辑部分添加一段 JavaScript 代码,用于调用 .NET 方法。这段代码的核心是 window.external 对象,它允许 JavaScript 访问 .NET 对象。我们在用户输入正确密码或者游戏胜利等条件下执行下面的 JavaScript 代码即可:

window.external.ExecuteExitSrc(); 

对于 .NET 代码,可以创建一个和单独的类以供 web 调用:

[ComVisible(true)]
public class JavaScriptInteraction
{
    public void ExecuteExitSrc()
    {
        Application.Exit();
    }
}

需要注意的是,我们需要在该类上添加一个 [ComVisible(true)] 特性。这个特性使得该类的公共成员可以被 COM 组件访问,从而实现 JavaScript 与 .NET 方法之间的互操作,否则你会收到下面的错误信息:

System.ArgumentException:“ObjectForScripting 的类必须对 COM 可见。  请确认该对象是公共的,或考虑向您的类添加 ComVisible 特性。”

最后,需要在 webBrowser 控件的 ObjectForScripting 属性中设置一个 .NET 对象,这个对象将用于被 JavaScript 调用:

webB.ObjectForScripting = new JavaScriptInteraction();

4. 新的屏保

为了演示新功能的使用,在 html 目录中,提供了一个演示用的 exit.html 直接提供了网页退出屏保的演示按钮。

新的功能提供了更多的可玩性,用户可以根据自己的喜好设计各种有意思的屏保,这样也是满足了输入密码退出这个功能的实现基础。当然我们可以有许多有意思的功能可以自行设计,比如:

  1. 解谜屏保:设计一个带有简单谜题的屏保,用户需要在网页上回答正确才能退出屏保。谜题可以是数学题、逻辑题或者常识题等,每次屏保激活时,可以随机从题库中抽取一道题目。既然是题库,甚至可以利用屏保学习各种知识,比如英语单词,各种考试题等等。

  2. 拼图屏保:制作一个拼图游戏,用户需要在网页上完成拼图才能退出屏保。可以使用用户自己的照片作为拼图素材,或者从网上随机抓取图片。拼图难度可以根据用户的喜好进行调整。

  3. 计时屏保:设置一个倒计时屏保,用户需要在网页上等待一段时间(例如,1分钟)后才能退出屏保。在等待期间,可以展示一些有趣的事物,如名言警句、美丽的图片或者实时新闻等。

通过这些有趣的屏保设计方案,用户在退出屏保时可以享受到更多互动和趣味性。此外,这些方案还可以根据用户的喜好和需求进行定制和扩展,为用户带来更丰富的屏保体验。

同时,我还在更新中提供了一个经典的 2048 小游戏,要求玩家在赢得游戏后才能退出屏保。

请添加图片描述

这个游戏改的逻辑其实是没有改好的,也懒得调整了,更新一下游戏介绍也是可以的。

请添加图片描述

请添加图片描述

5. 背后的哲学

当玩家在游戏中努力拼搏,最终赢得游戏时,他们可能会发现,游戏并没有因此结束,屏保依然继续运行。这时,他们可能会意识到,即使付出了努力,结果也不一定如人意。而当玩家选择投降并重新开始游戏10次后,他们将发现这个看似无用的操作竟然让屏保退出,让电脑恢复正常使用。

也许只有努力过才会发现,游戏还是投降躺平舒服些,只需要重开十次,就会被比你努力凑齐 2048 赢得游戏来退出屏保更快。人生有时就是这样,在现实生活中,我们往往会面临两种选择:努力拼搏还是躺平投降。有时候,努力拼搏的结果并不一定能让我们达到预期的目标,反而可能让我们陷入更深困境,带来更多的困扰。而在某些情况下,选择躺平投降,反而能让我们以更轻松的心态面对问题,从而找到解决问题的更快方法。当然,该拼搏的时候,还是需要努力一把,万一就成功了呢?

6. 最后

本文向大家介绍了如何在 webBrowser 中的网页调用 .NET 方法,以及如何在屏保程序中加入游戏元素。通过这些技巧,我们可以为用户带来更有趣的屏保体验。希望本文能对大家有所帮助,最后项目地址是:https://github.com/sangyuxiaowu/HackerScreenSaver?wt.mc_id=DT-MVP-5005195 感兴趣的话,可以下载体验一下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

退出屏保前玩一把游戏吧!webBrowser中网页如何调用.NET方法 的相关文章

  • [程序名称].exe已停止工作

    我有一个基于 Framework 2 0 构建的 NET 应用程序 我已经为它构建了一个安装程序 并尝试在具有 3 5 的计算机上运行它 所有相关环境均在Windows 7上 该应用程序在我的开发机器上以 VS 调试模式完美运行 该机器也具
  • .NET 正则表达式可匹配任何语言的任何类型的字母

    我可以使用哪种正则表达式来匹配 允许 任何语言的任何类型的字母 我需要匹配任何字母 包括任何变音符号 例如 并排除任何类型的符号 数学符号 货币符号 装饰符号 方框图字符等 和标点符号 我正在使用 ASP NET MVC 2 和 NET 4
  • C# HTTP 请求解析器[重复]

    这个问题在这里已经有答案了 可能的重复 将原始 HTTP 请求转换为 HTTPWebRequest 对象 https stackoverflow com questions 318506 converting raw http reques
  • CLR 无法在 UWP 中创建基于 .NET 的 COM 对象

    我创建了一个类库 NET Framework 4 7 1 它实现了文本服务 ITfTextInputProcessorEx等 中TSF https msdn microsoft com en us library windows deskt
  • 将“String”转换为 c# .net 中 MD5“String”的 Base64 编码

    如何将我的密码 字符串 转换为 MD5 字符串 的 Base64 编码 就像这个字符串 password to X03MO1qnZdYdgyfeuILPmQ 请在这里帮助我 或者只是让我知道如何转换这个技术 password to X03M
  • 如何对使用 Controller.User 变量的控制器操作进行单元测试?

    我有一个控制器操作 如果用户已经登录 它会自动重定向到新页面 User Identity IsAuthenticated 针对这种情况编写单元测试以确保重定向发生的最佳方法是什么 我一直在使用以下 Mocks 和 Moq 来允许在我的单元测
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • 使用实体框架、代码优先方法解决结构问题

    我目前正在使用 EF 和代码优先方法从现有系统构建数据库 最好对 核心 类进行最小的更改 因此 我想找到 Structs 和 EF 的解决方法 是否可以以任何方式将 Struct 包装到类中 以便 EF 可以使用此 Struct 中的数据
  • 使用 C++/CLI 包装非托管 C++ 类库 - 问题 2 - 集合

    Note 这篇文章代表了我的询问的问题 2 两个问题中都会重复介绍部分 达到数字之前的所有文本 因为它是回答问题可能需要的背景信息 问题简介 我有一个非托管 C 库 其中包含多个 更高级别 库所共有和共享的类和函数 我现在需要向 C Net
  • C#中out参数有什么用

    你能告诉我具体的用途是什么吗out范围 相关问题 ref 和 out 和有什么不一样 C https stackoverflow com questions 516882 what is the difference between ref
  • 字符串索引和替换

    我今天刚刚遇到这个问题 想知道是否有人知道为什么这个测试可能会失败 取决于文化 目的是检查测试文本是否包含两个相邻的空格 这是根据string IndexOf 即使我告诉字符串替换所有出现的两个相邻空格 经过一些测试似乎 xAD以某种方式导
  • 如何获取对象具有的属性计数?

    我有一个具有许多属性的类 我需要找到一种方法来计算它所具有的属性数量 我想这样做是因为该类读取 CSV 文件 并且如果属性 csvcolumns 的数量小于文件中的列数 则需要发生特殊的事情 这是我的班级的示例 public class S
  • 使用 C# 执行 Powershell commandlet 时出错

    我有以下经过测试且有效的代码 using new Impersonator Administrator dev dev RunspaceConfiguration runspaceConfiguration RunspaceConfigur
  • Windows 服务在程序集加载时锁定

    我有一个用 C 编写的 Windows 服务 它还包括一个独立的控制台模式 用于调试目的 它在几乎每台运行它的计算机上都运行良好 但我们遇到了一种情况 当您尝试启动该服务时 它会锁定 然后由于超时而被终止 但是当在同一台机器上以控制台模式运
  • 如何通过文件关联执行已启动应用程序的事件?

    在尝试了一个新的 Windows 窗体项目后 我发现当您将文件类型与 Windows 中的可执行文件关联时 您可以使用以下命令找到启动应用程序的文件的文件路径args 0 from static void Main string args
  • .NET 单点登录

    我一直在尝试使用 C 为 NET Web 应用程序实现 WEB SSO 服务提供程序插件 我将使用 shibboleth 身份提供商 我已经使用 OpenSAML 库为 java 应用程序实现了相同的功能 我想知道在 NET 应用程序中使用
  • 当 Generic.List.Add 是函数中的最后一个语句并且开启尾调用优化时,性能会受到影响

    我遇到了一个奇怪的性能损失 我将其归结为以下代码
  • 哪个更快:清除集合或实例化新集合

    我的代码中有一些通用列表 其中有数十或数百个元素 有时我需要用其他对象重新填充此列表 所以问题是 调用什么会更快Clear 方法或创建一个new List
  • 调用异步方法在视图模型的构造函数中加载数据有警告

    我的视图包含一个 ListView 它显示来自互联网的一些数据 我创建一个异步方法来加载数据并在我的视图模型的构造函数中调用该方法 它有一个警告提示我现在使用await关键字 还有其他解决方案可以在构造函数中异步加载数据吗 有几种可以应用的
  • 如何使用默认电子邮件客户端发送电子邮件?

    我想使用系统的默认电子邮件客户端 雷鸟 outlook 等 从 net windows 窗体应用程序发送电子邮件 我想预设主题和正文 我认为有一种方法可以通过向 Windows 资源管理器发送类似的内容来做到这一点 mailto 电子邮件受

随机推荐

  • docker 安装完全分布式Hadoop集群

    一 搭建原因 鉴于本人机器性能较低 在机器上运行多个Linux虚拟机比较吃力 如果再在其上运行分布式计算环境 想必更加吃力 我想这也是很多同学的普遍问题 通过百度 我了解到了docker技术 网上有很多docker搭建Hadoop的教程 总
  • 微信小程序登陆账号验证隐私协议验证页面及代码

    微信小程序登陆页 页面主要是需要校验账号手机号 验证勾选同意使用协议和隐私政策 效果如下 1 账号密码部分页面代码
  • 移动Web开发入门(一) -- 像素、媒体查询、em、rem

    文章目录 一 移动Web开发 二 基本概念 分辨率 物理像素 CSS像素 物理像素和CSS像素的关系 设备像素比 dpr 获取dpr PPI DPI 视口 viewport 设置 Viewport 获取视口宽度 三 媒体查询 媒体类型 媒体
  • Java中Logger类应用

    类 Logger java lang Object java util logging LoggerLogger 对象用来记录特定系统或应用程序组件的日志消息 一般使用圆点分隔的层次名称空间来命名 Logger Logger 名称可以是任意
  • 最小费用最大流问题与算法实现(Bellman-Ford、SPFA、Dijkstra)

    摘要 今日 对最小费用最大流问题进行了一个简单的研究 并针对网上的一些已有算法进行了查找和研究 博客和资料很多 但是留下的算法很多运行失败 出错 或者意义不明 这里 个人对其中的Bellman Ford SPFA 改进的Dijkstra三种
  • CompletableFuture线程池执行多个任务进行链式、组合等助理使用

    2 1 CompletableFuture简介 使用线程池执行任务没法直接对多个任务进行链式 组合等处理 或者说实现起来比较麻烦需要借助并发工具类才能完成 CompletableFuture实现了对任务编排的能力 借助这项能力 可以轻松地组
  • Pycharm 出现报错:Failed building wheel for XXX

    报错原因 是因为Python解释器的版本太高 与Pycharm版本不符 解决办法 安装一个比pycharm低一个版本的python解释器 比如pycharm3 10 那Python就3 9或以下版本 如果答案 您满意 请采纳意见和点赞关注
  • 【操作系统原理】01-操作系统概览

    一 What Why 操作系统是管理计算机硬件和软件资源的计算机程序 管理配置内存 决定资源供需顺序 控制输入输出设备等 操作系统提供让用户和系统交互的操作界面 从手机到超级计算机 操作系统可简单也可复杂 操作系统的种类是多种多样的 不局限
  • SVN服务器搭建和使用(一)

    Subversion是优秀的版本控制工具 其具体的的优点和详细介绍 这里就不再多说 首先来下载和搭建SVN服务器 现在Subversion已经迁移到apache网站上了 下载地址 http subversion apache org pac
  • C#复制构造函数学习

    通过从另一个对象复制变量或将一个对象的数据复制到另一个对象来创建对象的构造函数称为复制构造函数 复制构造函数是一个参数化构造函数 包含相同类类型的参数 它的主要用途是将新实例初始化为现有实例的值 using System namespace
  • 电脑提示MSVCP140.dll文件丢失的解决方法

    打开软件或者游戏出现运行出现报错 提示 由于找不到 MSVCP140 dll 无法继续执行代码 重新安装程序可能会解决此问题 这一般是什么原因导致了这个问题 我们要如何解决 下面小编分享一下由于找不到MSVCP140 dll无法继续执行代码
  • linux卸载zookeeper_Zookeeper学习

    zookeeper 是一个分布式协调服务的开源框架 主要用来解决分布式集群中应用系统的一致性问题 本质上是一个分布式的小文件存储系统 提供基于类似文件系统的目录树方式的数据存储 并且可以对树中的节点进行有效管理 从而用来维护和监控你存储的数
  • nosql 之认识篇

    使用sql server n年后 发现mysql这个开源数据库也很好用 于是投身到这个行列中 最近开发个sns类型的网站 随着用户的增多 感觉数据库所承受的压力成为了整个网站继续发展的瓶颈 为了更好的解决此问题 发现twitter face
  • CRNN+CTC实现不定长验证码识别(keras模型-训练篇)

    目录 前言 运行环境 生成数据集 构建网络模型 初步训练模型 测试模型 进一步训练模型 结语 前言 本文为CRNN CTC实现不定长验证码识别 keras模型 示例篇 的续篇 示例篇中使用的字符仅为数字 本文将训练集拓展到包含数字字母在内的
  • SharedPreferences存储

    目录 1 获得SharedPreferences对象 1 1 使用getSharedPreferences 方法获取 1 2 使用getPreferences 方法获取 2 向SharedPreferences文件中存储数据 3 读取Sha
  • 封装一个底部导航

    html部分
  • GPT-3.5-turbo小白连接教程

    前言 最近在看Chat几批题的相关内容 尝试了在自己电脑上调用一下OpenAI的api 下面以调用几批题 3 5 turbo为例进行讲解 本次分享分为三大模块 第一个模块先对连接成功后的AI聊天机器人的功能进行简要了解 第二个模块讲一下国内
  • mysql workbench怎么设置为中文?(仅菜单项汉化)附带main_menu文件

    找到Mysql Workbench安装目录 若全部默认则地址如下 C Program Files MySQL MySQL Workbench 8 0 CE data 里面有main menu xml文件 用汉化后的文件替换软件重启即可 链接
  • 性能测试ftp服务器,测试ftp服务器的性能

    测试ftp服务器的性能 内容精选 换一换 云耀云服务器适用于对CPU 内存 硬盘空间和带宽无特殊要求 服务一般只需要部署在一台或少量的服务器上 一次投入成本少 后期维护成本低的场景 例如网站开发 Web应用 推荐使用云耀云服务器 主要提供均
  • 退出屏保前玩一把游戏吧!webBrowser中网页如何调用.NET方法

    本文主要以 HackerScreenSaver 新功能的开发经历介绍 webBrowser中网页如何调用 NET方法的过程 1 背景 之前开源了一款名为 HackerScreenSaver 的 Windows 屏保程序 该程序具有模拟黑客炫