运行时设置.NET类库与Win类库位置



虽然目前32位操作系统的用户已经很少了,但若是你的程序需要兼容x86系统,可以参考一下本文。

首先,.NET 的类库是可以同时兼容x86和x64系统的(编译选项中设置目标CPU为AnyCPU),只要你的类库不包含任何本地代码(C、C++等)、或者针对特定系统的代码。

如果你的程序调用了第三方的类库,并且只能提供 x86\x64 两个版本的话,就需要在执行时设置类库文件的位置。

- 阅读全文 -

让 SQLite.NET 支持 REGEXP 及自定义函数



SQLite 是免费、开源的内嵌式文件数据库,不需要服务器端,也没有客户端的限制,采用的是内嵌方式或者是动态链接,用来访问和改写数据库文件。SQLite 是许多操作系统(如安卓和Linux)的默认数据库,比微软的 ACCESS 高不知道哪里去。

目前最新版的 SQLite 已支持许多流行的查询函数,比如 JSONREGEXP 等。其中 REGEXP 可以对字段进行正则匹配,JSON 则是可以直接读写JSON格式的文本内容。
然而目前 SQLite 的 .NET 版本仅支持 JSON 相关函数,REGEXP 的正则匹配函数并不支持。

好在 SQLite 的扩展性非常高,我们可以自行为 SQLite 添加函数,用于补齐 SQLite.NET 内不支持的函数。
并且,由于我们采用 .NET 的正则处理类,所以我们可以使用更加标准的正则语法,而非 SQLite 较为“畸形”和不便的原生规则。

- 阅读全文 -

【VB.NET】程序域与反射,如何正确使用程序域



dotNET 中拥有“反射”这一机制,可以在运行时动态加载类库、分析类型、创建对象、调用方法属性等。因此,反射非常适合做插件系统或是动态内容更新。
然而反射拥有一个非常致命的缺点:已被加载的程序集,是无法在程序运行期间卸载的!!!
没错,如果你使用了反射功能,那么所有被加载的程序集,会一直占用你的内存,直到你关闭程序。

那么是否有方法可以在程序运行期间动态加载与卸载程序集呢?
答案就是“AppDomain(程序域)”。

- 阅读全文 -

【VB.NET】使用 NLua 来为程序添加 Lua 脚本支持


Lua 是一款免费开源的嵌入式脚本语言,使用C语言开发,轻量、敏捷、可扩展性强,因此有许多程序使用Lua作为自己的脚本开发环境,用于程序的热更新、插件系统、或是逻辑代码等等。

Lua采用C语言开发,因此C、C++可以直接将其集成到程序内部,其他语言也可以使用 Lua 的动态运行库,将其动态加载到自己的程序中。

如果想在.NET中使用Lua,目前的方案也有许多,但我个人比较推荐 MoonSharpNeoLuaNLua,其中 MoonSharp 和 NeoLua 是完全用C#写的基于Lua5.2、5.3的.NET库,而 NLua 则是基于Lua官方的DLL运行库所包装的.NET库(支持最新的LUA5.4)。
速度上应该是 NLua 更快,兼容性最高,所以本文将采用 NLua 作为教程。

- 阅读全文 -

【.NET类库】ClsoINI 一个简单易用的 .NET INI配置文件读写库


我自己喜欢写点小程序,经常会需要保存一些配置与参数。
如果数据量比较多、比较杂乱,我还是推荐使用 Newtonsoft.Json 或者新版本内置的 System.Text.Json 。
Json格式较容易序列化与反序列化,不需要自己关注太多,使用较为轻松。

然而若是程序比较小,存储的数据量不是很多的话,我个人经常使用的是INI配置文件。
INI这种文件十分古老,格式也非常简单,并且 Windows 系统内部就有读写INI的API,如 GetPrivateProfileStringWritePrivateProfileString
不过 GetPrivateProfileStringWritePrivateProfileString 这两个API接口并不支持读取内存中的数据,或者是文件流、网络流,所以在某些时候使用并不方便。
因此,我自己就写了一个自用的INI类库,方便自己更容易读写INI配置文件,同时也方便自己控制何时读取、从哪里读取、何时写入数据。

- 阅读全文 -

【VB.NET】在Vista之后的操作系统中获取窗体的正确坐标(忽略阴影)

我们可以使用系统API GetWindowRect,通过窗体句柄来获取指定窗体位于屏幕中的位置及大小。
然而在最新的操作系统中(Vista之后),通过 GetWindowRect 获取的窗体范围数据,其实是包含窗体阴影部分的,因此其数据并不准确,如果涉及窗体坐标操控的话,会导致窗体偏移,无法移动到正确的位置。
如果你不想计算阴影部分,仅仅想获得窗体自身的坐标,就必须要使用 DwmGetWindowAttribute 这个新的API来达成目的。

- 阅读全文 -

原神3.0版获取祈愿URL地址的方法


原神之前的祈愿导入工具,一般都是读取原神LOG日志文件内的URL地址,再对祈愿历史进行导入的。
然而自从原神更新了3.0之后,米哈游已经屏蔽了这种方式,防止被第三方工具读取祈愿记录了。
米哈游为了让玩家不为自己花的钱心疼,利用了各种方式阻止我们获取自己的祈愿记录,他真的……我哭死!

然而有堵就有疏,除了使用代理模式进行HTTP拦截之外,github上已有大佬发现了新的漏洞,可以通过读取剪贴板内HTML代码的方式来获取网页源地址。
https://github.com/EnderSyth/Genshin-Wish-Export

其实这个方法的原理非常简单,Windows支持将HTML源码复制到剪贴板内,用于程序之间的文本格式兼容。然而这个方法不仅会在剪贴板内保存HTML源码,还会在数据头上保留 SourceURL 也就是网页源地址。
利用对数据头上 SourceURL 的读取,我们就可以直接获取到原神祈愿历史的网页地址了。

不过这个方式不知道还能被利用多久,米哈游只需要在 webbrowser 中禁止快捷键即可阻止玩家复制里面的HTML代码了。

- 阅读全文 -

【VB.NET】获取当前系统的所有本地语言信息

.NET 可以轻松获取当前系统的语言信息,当你想做一个支持多语言的程序时,可以通过CultureInfo的数据来加载不同的资源文件,用以支持国际化。

但是某些语言可能并不只有当地可以使用,就比如港澳台都使用繁体中文,而大陆和新加坡使用的是简体中文,美式英语和英式英语虽有部分区别、但大部分单词都是相同的。如果为每一个不同地区的人都准备不同的语言资源包,不仅繁琐而且浪费。

- 阅读全文 -

【VB.NET】使用 VlcLib(VlcDotNet)播放在内存中的视频流

在WPF程序中,我们可以使用 MediaElement 控件播放视频,只要我们的系统中拥有相应的解码器即可。
即便Windows系统中没有相关的解码器,我们也可以通过安装一些解码器补丁程序(如 K-Lite Basic ),来增强和补完系统的媒体解码器。

虽然播放格式的问题可以通过第三方插件解决,然而 MediaElement 有一个致命的缺点,那就是它仅支持从本地或是网络地址来加载媒体文件,并不能通过数据流加载媒体,因此在使用时有许多的限制。

好在我们可以通过使用第三方的媒体库 VlcLib 来解决这个问题,让我们的 WPF 或是 WinForm 程序实现从文件流、内存流中加载媒体文件,并且其自身就拥有丰富的解码器插件,因此并不需要第三方或是系统解码器的支持,即可播放绝大部分的视频格式!

- 阅读全文 -

使用 PDFSharp 提取PDF文件中的图片

最近准备重写某个程序,想实现从PDF文件中提取页面内图片的功能。
搜索了半天,发现能轻松从PDF页面中提取图片的类库要么是收费的,要么得花巨大的学习成本才能使用这类免费类库……
又花了大半天的时间学习PDFSharp的用法,发现实在太复杂自己根本搞不定,正准备放弃的时候,我才发现原来已经有人写过一个 PDFSharp.Extensions 的PDFSharp扩展类库,可以帮助我们轻松地从PDF中提取图片。

- 阅读全文 -

將頁面轉換爲繁體

公告

欢迎您光临鄙人的小站,虽然没什么太专业的东西,不过如果本站的文章能让您有所收获、或者仅仅是博您一笑,那么也不枉费我建站的辛苦了!

您可以使用邮件订阅来获得邮件更新提醒。

瞎哔哔

    站长太懒,基本上是月更,以后会慢慢提高更新频率。

  • 查看更多...

最新文章

随机文章

最近回复

分类

标签