2025-09-19
C#
00

概述

在本文中,我们将详细讲解如何使用C#的GDI+实现直线插补运动的模拟。上图展示了一个基本的直线插补示意图,我们将通过代码来实现这个效果。

基础知识

直线插补是数控系统中的一个基本概念,它是指在两点之间通过算法计算出中间点的过程,使运动呈现连续平滑的状态。

代码实现

image.png

2025-09-19
C#
00

NumSharp 是一个基于C#的数值计算库,它提供了丰富的功能和方法,可以帮助开发者进行高效的数值计算和数据处理。下面将介绍NumSharp的应用场景,以及常用的属性与方法。

应用场景

NumSharp适用于需要进行大规模数值计算和数据处理的场景,比如机器学习、数据分析、科学计算等领域。开发者可以使用NumSharp来进行矩阵运算、向量计算、统计分析等操作,从而实现复杂的数值计算任务。

安装NumSharp

image.png

示例

2025-09-19
C#
00

在这篇文章中,我们将探讨如何使用C#通过Windows API来读取和修改其他应用程序的内存。这种技术常用于游戏外挂开发、程序调试和系统监控等场景。

基础知识

在开始之前,我们需要了解以下几个关键的Windows API函数:

  • OpenProcess:获取目标进程的句柄
  • ReadProcessMemory:读取目标进程的内存
  • WriteProcessMemory:写入目标进程的内存
  • VirtualAllocEx:在目标进程中分配内存
  • VirtualFreeEx:释放目标进程中的内存

被修改的示例程序

2025-09-19
C#
00

在C#编程中,我们经常需要对系统或者其他程序进行一些钩子操作,比如监控系统的API调用,修改其他程序的行为等。而C# EasyHook提供了一种简单而强大的方式来实现这些操作。本文将介绍C# EasyHook的基本使用方法,并给出一个完整的例子来演示其应用场景。

特性

  1. "线程死锁屏障"处理了在挂钩未知API时的许多核心问题;这项技术是EasyHook独有的。
  2. 可以为非托管API编写托管挂钩处理程序。
  3. 可以利用托管代码提供的所有便利,如.NET Remoting、WPF和WCF。
  4. 在可能的情况下,.NET程序集被注入到一个新的AppDomain中,确保在分离时完全从目标中卸载您的程序集。
  5. 可以编写注入库和主机进程,编译为AnyCPU,这允许您从32位和64位进程中注入您的程序集到64位和32位进程中。
  6. 您的.NET程序集不需要在全局程序集缓存(GAC)中注册,极大地简化了开发和发布过程。
  7. EasyHook支持64位目标的RIP相对地址重定位。
  8. 支持挂钩COM接口。
  9. 有文档化的纯非托管挂钩API。
  10. 目标中不会留下任何资源或内存泄漏。
  11. EasyHook32.dll和EasyHook64.dll是本机库,可以在没有任何.NET Framework安装的情况下使用。
  12. 所有挂钩都以稳定的方式安装和自动移除。
  13. 支持线程ACL来控制哪些线程将使用挂钩。
  14. 实验性的隐蔽注入机制,不会引起杀毒软件的注意。
  15. 在挂钩处理程序内部获取调用的托管/非托管模块的堆栈跟踪。
  16. 在挂钩处理程序内部获取调用的托管/非托管模块。
  17. 在挂钩处理程序内创建自定义堆栈跟踪。
  18. 无需解包/安装。
  19. 不需要Visual Studio的可再发行组件。
  20. 支持32位和64位内核模式挂钩——但不提供绕过PatchGuard的支持。
2025-09-19
C#
00

在.NET开发中,LINQ(Language Integrated Query)提供了一种强大且优雅的方式来查询和操作数据。然而,在某些场景下,我们需要根据运行时条件动态构建查询,这在标准的LINQ中可能会变得复杂和笨拙。幸运的是,System.Linq.Dynamic.Core 库提供了一种灵活的解决方案,允许我们以字符串的形式动态指定查询参数,极大地提高了代码的灵活性和可重用性。本文将通过一系列例子,探索如何高效应用 System.Linq.Dynamic.Core 来处理动态查询。

安装 System.Linq.Dynamic.Core

首先,确保你的项目中已经安装了 System.Linq.Dynamic.Core。你可以通过NuGet包管理器来安装它:

PowerShell
Install-Package System.Linq.Dynamic.Core

动态选择字段

假设我们有一个用户列表,我们希望根据用户的请求动态选择返回的字段。使用 System.Linq.Dynamic.Core,我们可以轻松实现这一需求。