自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

walterlv - 吕毅

欢迎访问 https://blog.walterlv.com/ 热爱设计,不止是程序,更是艺术!

  • 博客(510)
  • 资源 (1)
  • 收藏
  • 关注

原创 一个简单的方法:截取子类名称中不包含基类后缀的部分

基类是 MenuItem,子类是 WalterlvMenuItem、FooMenuItem。基类是 Configuration,子类是 WalterlvConfiguration、ExtensionConfiguration。在代码中,我们可能会为了能够一眼看清类之间的继承(从属)关系而在子类名称后缀中带上基类的名称。但是由于这种情况下的基类不参与实际的业务,所以对外(文件/网络)的名称通常不需要...

2019-12-30 08:35:36 182

原创 C# 8.0 的可空引用类型,不止是加个问号哦!你还有很多种不同的可空玩法

C# 8.0 引入了可空引用类型,你可以通过 ? 为字段、属性、方法参数、返回值等添加是否可为 null 的特性。但是如果你真的在把你原有的旧项目迁移到可空类型的时候,你就会发现情况远比你想象当中复杂,因为你写的代码可能只在部分情况下可空,部分情况下不可空;或者传入空时才可为空,传入非空时则不可为空。本文内容C# 8.0 可空特性更灵活控制的可空特性输入:`AllowNull`输入:`Dis...

2019-12-30 08:35:07 3934 1

原创 Windows 系统的默认字体是什么?应用的默认字体是什么?

作为中文应用的开发者,我们多半会认为系统的默认字体是“微软雅黑”。然而如果真的产生了这种误解,则很容易在开发本地化应用的时候踩坑。于是本文带你了解 Windows 系统的默认字体。本文内容Windows 10/8.1/8/7/VistaWindows XP 及更早系统Windows 10/8.1/8/7/VistaWindows 操作系统的默认字体是 Segoe UI(发音为 see g...

2019-12-30 08:33:21 37186

原创 可集成到文件管理器,一句 PowerShell 脚本发布某个版本的所有 NuGet 包

要发布 NuGet 包,只需要执行命令 nuget push xxx.nupkg 即可,或者去 nuget.org 点鼠标上传。不过,如果你有很多的 NuGet 包并且经常需要推送的话,也可以集成到 Directory Opus 或者 Total Commander 中。本文内容NuGet 推送命令用 PowerShell 包装一下集成到 Directory OpusNuGet 推送命令...

2019-12-30 08:32:26 456

原创 清理 git 仓库太繁琐?试试 bfg!删除敏感信息删除大文件一句命令搞定(比官方文档还详细的使用说明)

你可能接触过 git-filter-branch 来清理 git 仓库,不过同时也能体会到这个命令使用的繁琐,以及其超长的执行时间。现在,你可以考虑使用 bfg 来解决问题了!本文内容安装 bfg传统方式安装(不推荐)使用包管理器 scoop 安装准备工作常见用法删除误上传的大文件删除特定的一个或多个文件删除文件夹删除敏感的密码信息推回远端仓库附命令行用法输出安装 bfg传统方式安装(不...

2019-12-30 08:28:35 2473 1

原创 C#/.NET 当我们在写事件 += 和 -= 的时候,方法是如何转换成事件处理器的

当我们在写 += 和 -= 事件的时候,我们会在 += 或 -= 的右边写上事件处理函数。我们可以写很多种不同的事件处理函数的形式,那么这些形式都是一样的吗?如果你不注意,可能出现内存泄漏问题。本文将讲解事件处理函数的不同形式,理解了这些可以避免编写代码的时候出现内存相关的问题。本文内容典型的事件处理函数变种事件处理函数编译器类型转换不是同一个委托实例`+=` `-=` 是怎么做的`-=`...

2019-12-30 08:27:43 1722

原创 .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表

我们知道,32 位程序在读取注册表的时候,会自动将注册表的路径映射到 32 位路径下,即在 Wow6432Node 子节点下。但是 64 位程序不会映射到 32 位路径下。那么 64 位程序如何读取到 32 位程序写入的注册表路径呢?本文内容Wow6432Node如何在 64 位程序中读取 32 位注册表路径Walterlv.Win32Wow6432Node对于 32 位程序,读取注册表...

2019-12-30 08:25:28 836

原创 将 Direct3D11 在 GPU 中的纹理(Texture2D)导出到内存(Map)或导出成图片文件

Direct3D11 的使用通常不是应用程序唯一的部分,于是使用 Direct3D11 的代码如何与其他模块正确地组合在一起就是一个需要解决的问题。本文介绍将 Direct3D11 在 GPU 中绘制的纹理映射到内存中,这样我们可以直接观察到此纹理是否是正确的,而不用担心是否有其他模块影响了最终的渲染过程。本文内容SharpDX来自于 Direct3D11 的渲染纹理关键代码(SharpDX...

2019-12-30 08:23:36 4392 1

原创 使用 Direct3D11 的 OpenSharedResource 方法渲染来自其他进程/设备的共享资源(SharedHandle)

如果你得到了一个来自于其他进程或者其他模块的 Direct3D11 的共享资源,即 SharedHandle 句柄,那么可以使用本文提到的方法将其转换成 Direct3D11 的设备和纹理,这样你可以进行后续的其他处理。本文内容SharpDXSharedHandleOpenSharedResource后续操作获取 Texture2D获取 Texture2DDescription获取 Surfa...

2019-12-30 08:06:18 3455 1

原创 .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)

我们知道 Windows 系统 NTFS 文件系统提供了硬连接功能,可以通过 mklink 命令开启。如果能够通过代码实现,那么我们能够做更多有趣的事情。本文提供使用 .NET/C# 代码创建 NTFS 文件系统的硬连接功能(目录联接)。本文内容目录联接使用 .NET/C# 实现使用 JunctionPoint目录联接以管理员权限启动 CMD(命令提示符),输入 mklink 命令可以得...

2019-12-30 08:05:28 949

原创 WPF 高性能位图渲染 WriteableBitmap 及其高性能用法示例

WPF 渲染框架并没有对外提供多少可以完全控制渲染的部分,目前可以做的有:D3DImage,用来承载使用 DirectX 各个版本渲染内容的控件WriteableBitmap,通过一段内存空间来指定如何渲染一个位图的图片HwndHost,通过承载一个子窗口以便能叠加任何种类渲染的控件本文将解释如何最大程度压榨 WriteableBitmap 在 WPF 下的性能。本文内容如何使用 ...

2019-12-30 08:04:27 8344

原创 如何在 .NET 项目中开启不安全代码(以便启用 unsafe fixed 等关键字)

有小伙伴希望在 .NET 代码中使用指针,操作非托管资源,于是可能使用到 unsafe fixed 关键字。但使用此关键字的前提是需要在项目中开启不安全代码。本文介绍如何在项目中开启不安全代码。本文内容入门方法高级方法临时方法其他说明入门方法第一步:在你需要启用不安全代码的项目上点击右键,然后选择属性:第二步:在“生成”标签下,勾选上“允许不安全代码”:第三步:切换到 Relea...

2019-12-30 08:02:43 2500 1

原创 使用 .editorconfig 配置 .NET/C# 项目的代码分析规则的严重程度

随着 Visual Studio 2019 更新,在 Visual Studio 中编写代码的时候也带来了基于 Roslyn 的代码质量分析。有一些代码分析严重程度可能与团队约定的不一致,这时就需要配置规则的严重程度。另外如果是个人使用插件安装了分析器,也可以配置一些严重程度满足个人的喜好。本文介绍使用 .editorconfig 文件来配置 .NET/C# 项目中,代码分析规则的严重性。可以是...

2019-12-30 08:01:38 1748

原创 什么是模态窗口?本文带你了解模态窗口的本质

做 Windows 桌面应用开发的小伙伴们对“模态窗口”(Modal Dialog)一定不陌生。如果你希望在模态窗口之上做更多的事情,或者自己实现一套模态窗口类似的机制,那么你可能需要了解模态窗口的本质。本文不会太深,只是从模态窗口一词出发,抵达大家都熟知的一些知识为止。本文内容开发中的模态窗口模态窗口的三个特点实现模态窗口API 调用禁用主窗口阻塞代码等待操作完成进行 UI 强提醒开发中...

2019-11-27 08:05:33 9345

原创 直击本质:WPF 框架是如何实现模态窗口的

想知道你在 WPF 编写 Window.ShowDialog() 之后,WPF 框架是如何帮你实现模态窗口的吗?本文就带你来了解这一些。本文内容`Window.ShowDialog``ShowHelper`Window.ShowDialogWPF 显示模态窗口的方法就是 Window.ShowDialog,因此我们直接进入这个方法查看。由于 .NET Core 版本的 WPF 已经开源,...

2019-11-27 08:01:45 1301

原创 Windows 系统上用 .NET/C# 查找所有窗口,并获得窗口的标题、位置、尺寸、最小化、可见性等各种状态

在 Windows 应用开发中,如果需要操作其他的窗口,那么可以使用 EnumWindows 这个 API 来枚举这些窗口。你可以使用本文编写的一个类型,查找到所有窗口中你关心的信息。本文内容需要使用的 API枚举所有窗口附源码需要使用的 API枚举所有窗口仅需要使用到 EnumWindows,其中需要定义一个委托 WndEnumProc 作为传入参数的类型。剩下的我们需要其他各种方法...

2019-11-27 08:01:00 5585 2

原创 .NET/C# 检测电脑上安装的 .NET Framework 的版本

如果你希望知道某台计算机上安装了哪些版本的 .NET Framework,那么正好本文可以帮助你解决问题。本文内容如何找到已安装的 .NET Framework注册表位置和含义读取注册表如何找到已安装的 .NET Framework有的电脑的 .NET Framework 是自带的,有的是操作系统自带的。这样,你就不能通过控制面板的“卸载程序”去找到到底安装了哪个版本的 .NET Fram...

2019-11-27 07:59:50 3409

原创 使用傲梅分区助手无损合并分区,无损调整分区大小

Windows 本身就提供了强大的磁盘和分区管理工具,一个是操作简单的“磁盘管理”,一个是功能强大的命令行版的“diskpart”。不过这两个都有一些限制,一是不能影响到系统文件,二是其修改的分区不能被应用程序占用(diskpart 可在下次重启时做到)。另外,系统为了管理工具操作的效率和正确性,也有一些功能没有开放。DiskGenius 是个强大的工具,不过傲梅也很良心。本文介绍使用傲梅分区助...

2019-11-27 07:53:09 17311 1

原创 EFI 分区/恢复分区不可删除?你需要使用命令行了(全命令行操作)

Windows 系统在安装的时候,会自动为我们的磁盘划分一个恢复分区和一个 EFI 分区。如果后面不打算再用这些分区的时候,却发现无法删除。本文将提供解决方法。因为误操作会导致数据丢失,所以我将两种不同的解决方法分开成两篇文章以避免干扰:EFI 分区/恢复分区不可删除?你需要使用命令行了(配合鼠标操作)EFI 分区/恢复分区不可删除?你需要使用命令行了(全命令行操作)本文内容无法删...

2019-11-27 07:52:18 5254

原创 EFI 分区/恢复分区不可删除?你需要使用命令行了(配合鼠标操作)

Windows 系统在安装的时候,会自动为我们的磁盘划分一个恢复分区和一个 EFI 分区。如果后面不打算再用这些分区的时候,却发现无法删除。本文将提供解决方法。因为误操作会导致数据丢失,所以我将两种不同的解决方法分开成两篇文章以避免干扰:EFI 分区/恢复分区不可删除?你需要使用命令行了(配合鼠标操作)EFI 分区/恢复分区不可删除?你需要使用命令行了(全命令行操作)本文内容无法删...

2019-11-27 07:51:32 10026 2

原创 WPF 程序如何移动焦点到其他控件

WPF 中可以使用 UIElement.Focus() 将焦点设置到某个特定的控件,也可以使用 TraversalRequest 仅仅移动焦点。本文介绍如何在 WPF 程序中控制控件的焦点。本文内容`UIElement.Focus``TraversalRequest`关于逻辑焦点和键盘焦点跨窗口/跨进程切换焦点UIElement.Focus仅仅需要在任何一个控件上调用 Focus() 方法...

2019-11-27 07:50:30 2875

原创 使用 SetParent 制作父子窗口的时候,如何设置子窗口的窗口样式以避免抢走父窗口的焦点

制作传统 Win32 程序以及 Windows Forms 程序的时候,一个用户看起来独立的窗口本就是通过各种父子窗口嵌套完成的,有大量窗口句柄,窗口之间形成父子关系。不过,对于 WPF 程序来说,一个独立的窗口实际上只有一个窗口句柄,窗口内的所有内容都是 WPF 绘制的。如果你不熟悉 Win32 窗口中的父子窗口关系和窗口样式,那么很有可能遇到父子窗口之间“抢夺焦点”的问题,本文介绍如何解决这...

2019-11-27 07:49:47 2922

原创 WPF 程序如何跨窗口/跨进程设置控件焦点

WPF 程序提供了 Focus 方法和 TraversalRequest 来在 WPF 焦点范围内转移焦点。但如果 WPF 窗口中嵌入了其他框架的 UI(比如另一个子窗口),那么就需要使用其他的方法来设置焦点了。一个粗略的设置方法是,使用 Win32 API:SetFocus(hwnd);传入的是要设置焦点的窗口的句柄。参考资料winapi - Win32: C++: How d...

2019-11-27 07:47:47 863

原创 .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件

弱引用是 .NET 引入的概念,可以用来协助解决内存泄漏问题。然而事件也可能带来内存泄漏问题,是否有弱事件机制可以使用呢?.NET 没有自带的弱事件机制,但其中的一个子集 WPF 带了。然而我们不是什么项目都能引用 WPF 框架类库的。本文介绍 Walterlv.WeakEvents 库来定义和使用弱事件。本文内容下载安装 Walterlv.WeakEvents定义弱事件使用弱事件系列博客...

2019-11-27 07:47:03 345

原创 .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)

弱引用是 .NET 引入的概念,可以用来协助解决内存泄漏问题。然而事件也可能带来内存泄漏问题,是否有弱事件机制可以使用呢?.NET 没有自带的弱事件机制,但其中的一个子集 WPF 带了。然而我们不是什么项目都能引用 WPF 框架类库的。网上有很多弱事件的 NuGet 包,不过仅仅支持定义事件的时候写成弱事件而不支持让任意事件变成弱事件,并且存在性能问题。本文介绍 Walterlv.WeakEve...

2019-11-27 07:45:45 322

原创 .NET 设计一套高性能的弱事件机制

弱引用是 .NET 引入的概念,可以用来协助解决内存泄漏问题。然而事件也可能带来内存泄漏问题,是否有弱事件机制可以使用呢?.NET 没有自带的弱事件机制,但其中的一个子集 WPF 带了。然而我们不是什么项目都能引用 WPF 框架类库的。网上有很多弱事件的 NuGet 包,不过仅仅支持定义事件的时候写成弱事件而不支持让任意事件变成弱事件,并且存在性能问题。本文将设计一套弱事件机制,不止可以让任意一...

2019-11-27 07:44:55 353

原创 如何在 WPF 中获取所有已经显式赋过值的依赖项属性

获取 WPF 的依赖项属性的值时,会依照优先级去各个级别获取。这样,无论你什么时候去获取依赖项属性,都至少是有一个有效值的。有什么方法可以获取哪些属性被显式赋值过呢?如果是 CLR 属性,我们可以自己写判断条件,然而依赖项属性没有自己写判断条件的地方。本文介绍如何获取以及显式赋值过的依赖项属性。需要用到 DependencyObject.GetLocalValueEnumerator() 方...

2019-11-27 07:44:05 455

原创 在 WPF 中获取一个依赖对象的所有依赖项属性

本文介绍如何在 WPF 中获取一个依赖对象的所有依赖项属性。本文内容通过 WPF 标记获取通过设计器专用方法获取通过 WPF 标记获取public static IEnumerable<DependencyProperty> EnumerateDependencyProperties(object element){ if (element is null) ...

2019-11-27 07:43:34 615

原创 WPF 制作高性能的透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True)

在 WPF 中,如果想做一个背景透明的异形窗口,基本上都要设置 WindowStyle="None"、AllowsTransparency="True" 这两个属性。如果不想自定义窗口样式,还需要设置 Background="Transparent"。这样的设置会让窗口变成 Layered Window,WPF 在这种类型窗口上的渲染性能是非常糟糕的。本文介绍如何使用 WindowChrome ...

2019-11-27 07:42:44 3616

原创 临时编写和调试 C++ 代码?用 VSCode 就够了!一分钟搭好 C++ 调试环境

突然间要编写或者调试几个 C++ 的小程序,动用 Visual Studio 创建一个解决方案显得大了些。如果能够利用随时随地就方便打开的 Visual Studio Code 来开发,则清爽很多。本文教你一分钟在 Visual Studio Code 中搭建好 C++ 开发环境。本文大纲本文总共分为三个步骤,每个步骤都非常简单。本文内容本文大纲第一步:安装扩展第二步:启动 VSCode...

2019-11-27 07:41:11 12875 1

原创 发现电脑屏幕总是不自动关闭?看看你是否打开了这些程序……

本文收集一些已知的导致电脑屏幕不关闭的程序。如果你发现无论你设置多短的屏幕关闭超时时间但一直都不关闭,那么可以参考本文检查是否打开了这些程序。本文内容电源和睡眠大多数游戏应用工具为什么我想整理这份名单电源和睡眠先检查一下你系统设置中的电源和睡眠选项,时间不应该太长。一定要先看看这里,别到时候折腾了半天发现是自己设错了就亏了……另外,找程序的时候,不要第一眼看过去没有就忽略它了。因为你可...

2019-11-27 07:38:20 8181 2

原创 .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态

在 Windows 系统中,一段时间不操作键盘和鼠标,屏幕便会关闭,系统会进入睡眠状态。但有些程序(比如游戏、视频和演示文稿)在运行过程中应该阻止屏幕关闭,否则屏幕总是关闭,会导致体验会非常糟糕。本文介绍如何编写 .NET/C# 代码临时阻止屏幕关闭以及系统进入睡眠状态。本文内容Windows APIAPI 封装Windows API我们需要使用到一个 Windows API:/// ...

2019-11-27 07:36:51 6126 1

原创 git fetch 失败,因为 unable to resolve reference 'refs/remotes/origin/xxx': reference broken

我在使用 git fetch 命令的时候,发现竟然会失败,提示错误 error: cannot lock ref 'refs/remotes/origin/xxx': unable to resolve reference 'refs/remotes/origin/xxx': reference broken。本文介绍如何修复这样的错误,并探索此错误产生的原因。本文内容错误修复错误在使用...

2019-10-28 09:35:39 5741 1

原创 WPF 不要给 Window 类设置变换矩阵(应用篇)

WPF 的 Window 类是不允许设置变换矩阵的。不过,总会有小伙伴为了能够设置一下试图绕过一些验证机制。不要试图绕过,因为你会遇到更多问题。本文内容试图设置变换矩阵绕过验证小心异常试图设置变换矩阵当你试图给 Window 类设置变换矩阵的时候,会出现异常:System.InvalidOperationException:“转换对于 Window 无效。”无论是缩放还是旋转,都...

2019-10-28 09:34:44 393

原创 WPF 不要给 Window 类设置变换矩阵(分析篇):System.InvalidOperationException: 转换不可逆。

最近总是收到一个异常 “System.InvalidOperationException: 转换不可逆。”,然而看其堆栈,一点点自己写的代码都没有。到底哪里除了问题呢?虽然异常堆栈信息里面没有自己编写的代码,但是我们还是找到了问题的原因和解决方法。本文内容异常堆栈分析过程源代码`PointUtil.TryApplyVisualTransform``PointUtil.TryClientToR...

2019-10-28 09:33:48 694 2

原创 提高使用 Visual Studio 开发效率的键盘快捷键

Visual Studio 的功能可谓真是丰富,再配合各种各样神奇强大的插件,Visual Studio 作为太阳系最强大的 IDE 名副其实。如果你能充分利用起 Visual Studio 启用这些功能的快捷键,那么效率也会很高。本文内容建议记住万能重构转到所有重构重命名其他IntelliSense 自动完成列表智能感知参数信息编写代码格式化其他导航书签显示建议记住功能快捷键...

2019-10-28 09:30:16 623

原创 WPF 的 Application.Current.Dispatcher 中,Dispatcher 属性一定不会为 null

在 WPF 程序中,可能会存在 Application.Current.Dispatcher.Xxx 这样的代码让一部分逻辑回到主 UI 线程。因为发现在调用这句代码的时候出现了 NullReferenceException,于是就有三位小伙伴告诉我说 Current 和 Dispatcher 属性都可能为 null。然而实际上这里只可能 Current 为 null 而此上下文的 Dispat...

2019-10-28 09:27:59 3002

原创 WPF 的 Application.Current.Dispatcher 中,为什么 Current 可能为 null

在 WPF 程序中,可能会存在 Application.Current.Dispatcher.Xxx 这样的代码让一部分逻辑回到主 UI 线程。因为发现在调用这句代码的时候出现了 NullReferenceException,于是就有三位小伙伴告诉我说 Current 和 Dispatcher 属性都可能为 null。然而实际上这里只可能 Current 为 null 而此上下文的 Dispat...

2019-10-28 09:00:02 2558

原创 解决 WPF 嵌套的子窗口在改变窗口大小的时候闪烁的问题

因为 Win32 的窗口句柄是可以跨进程传递的,所以可以用来实现跨进程 UI。不过,本文不会谈论跨进程 UI 的具体实现,只会提及其实现中的一个重要缓解,使用子窗口的方式。你有可能在使用子窗口之后,发现拖拽改变窗口大小的时候,子窗口中的内容不断闪烁。如果你也遇到了这样的问题,那么正好可以阅读本文来解决。本文内容问题解决原因问题你可以看一下下面的这张动图,感受一下窗口的闪烁:实际上在拖...

2019-10-28 08:58:23 1992 2

原创 System.ComponentModel.Win32Exception (0x80004005): 无效的窗口句柄。

在 WPF 获取鼠标当前坐标的时候,可能会得到一个异常:System.ComponentModel.Win32Exception:“无效的窗口句柄。”。本文解释此异常的原因和解决方法。异常获取鼠标当前相对于元素 element 的坐标的代码:var point = Mouse.GetPosition(element);或者,还有其他的代码:var point1 = e.PointF...

2019-10-28 08:55:42 6342

UWP 程序所需的最少 Logo 资源

https://walterlv.github.io/post/create-uwp-app-from-zero-0.html 中 UWP 程序所需的最少 Logo 资源

2018-07-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除