自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张赐荣的技术博客

张赐荣的个人技术分享博客,记录开发经验、知识、心得体会和见解。

  • 博客(77)
  • 收藏
  • 关注

原创 C# 使用 AES 加解密文件

AES是一种高级加密标准,它是一种对称加密算法,也就是说,它使用相同的密钥来加密和解密数据。AES是美国国家标准技术研究所(NIST)在2001年选定的一种加密算法,用于替代旧的DES算法。AES支持三种不同的密钥长度:128位,192位和256位。AES的安全性很高,目前还没有找到有效的攻击方法。

2023-10-31 20:55:13 912

原创 C#导出本机Win32native dll

"3f/DllExport"的工作原理是修改了.NET生成的DLL,在其中插入了本机DLL的头以及导出函数表、重定位函数表信息等。这样,它就像一个普通的本机DLL一样,可以被任何支持调用本机DLL的语言或平台使用。当然,它本质上并不是真正的本机DLL,它的执行代码依然是IL(中间语言)而不是本机二进制代码,所以本身还是要依赖.NET运行时。只是因为现在有了导出函数表,并且加入了类似于普通DLL的头信息,看起来就与普通C语言导出的DLL相似。

2023-10-09 21:05:52 954

原创 C# 使用 HttpClient 实现异步下载文件

这段代码的功能是声明一个公共静态异步方法,用于下载指定URL的文件并保存到指定路径中。代码还支持传入一个进度回调函数和一个取消令牌,用于显示下载进度和取消下载任务。

2023-05-13 10:27:42 3889 1

原创 C# 反射调用方法通过命名参数传递值

接着我们创建了一个object数组parameters,并遍历ParameterInfo数组,根据每个ParameterInfo对象的Name属性来从字典中获取对应的值,并赋给parameters数组。命名参数是C#的一个特性,它允许我们在调用方法时,通过参数名来指定参数值,而不是通过参数的位置。这样可以避免记忆参数的顺序,也可以提高代码的可读性。6. 创建一个object数组,并根据ParameterInfo数组中每个元素的Name属性来从字典中获取对应的值,并赋给object数组。

2023-05-08 13:58:52 957

原创 C# 十六进制字符串与数值互相转换

此案例分析十六进制值的 string 并输出对应于每个十六进制值的字符。然后,调用 ToInt32(String, Int32)将十六进制值转换为表示为 int 的十进制值。下面的代码将会输出 string 中每个字符(char)的十六进制值。此案例演示了将十六进制 string 转换为整数的另一种方法,即调用 Parse(String, NumberStyles) 方法。//将整数值转换为字符串形式的十六进制值。//将以16为基数表示的数字转换为整数。//获取整数值对应的char。//输出: 2274。

2023-05-07 11:22:11 2567

原创 C# byte[] 与 int 类型互转

下面的例子会初始化字节数组,并在计算机体系结构为 little-endian(即首先存储最低有效字节)的情况下反转数组,然后调用 ToInt32(Byte[], Int32) 方法以将数组中的四个字节转换为 int。2. 《理解字节序 · 阮一峰》: https://www.ruanyifeng.com/blog/2016/11/byte-order.html。在下面的例子中,将调用 BitConverter 类的 GetBytes(Int32) 方法,将 int 转换为字节数组。

2023-05-07 09:54:28 2499

原创 Python 调用 MessageBeep 播放系统音效

"Windows API MessageBeep"是一个用于发出系统提示音效的函数。它可以向用户发出一种预定义的声音,以指示事件的发生或某个条件的满足。例如,在用户单击了一个无效的按钮或者尝试执行一个无效操作时,可以使用MessageBeep函数向用户发出警告声音。

2023-05-02 21:59:19 1218

原创 Python 调用 “GetDoubleClickTime“ 获取系统鼠标双击间隔时间

在Python中,可以使用ctypes模块来调用Windows API。

2023-05-02 21:13:25 961

原创 用 C# 实现独占音频设备降低其它程序的音量

本文介绍了如何使用 Windows API 中的 AccSetRunningUtilityState 函数实现音频闪避的功能。这个函数可以让辅助功能程序设置自己的音频闪避选项,从而影响系统对其他应用程序的音量控制。我们还给出了一个使用 C# 编写的示例代码,演示了如何调用这个函数。希望本文对你有所帮助。

2023-05-01 16:36:28 1995

原创 C# .Net 中的同步上下文

同步上下文是.NET中一个重要的概念,它影响了异步编程模式和语法的行为和效果。不同的.NET平台和环境实现了不同的同步上下文,以适应不同的同步模型。理解同步上下文的作用和用法,可以帮助我们编写正确和高效的异步代码。

2023-04-30 19:11:32 885

原创 C# 阿拉伯整数转中文算法

这个算法将一个整数转换成中文字符,它的大致流程如下:

2023-04-21 08:00:20 664

原创 InnoSetup 卸载软件自动关闭主程序

在 InnoSetup 中,[UninstallRun] 区段是一个可选区段,用于在卸载程序之前运行指定的命令或程序。

2023-04-20 09:19:49 1358

原创 Inno Setup实现软件开机自动运行的两种方法

当用户登录到 Windows 操作系统时,系统将自动在注册表的 Run 项中查找所有键,并在找到的每个键中查找 ValueName,如果找到则会自动运行 ValueData 中指定的程序。如果需要让用户在安装程序的过程中手动设置程序是否要开机自动启动,可以通过在 Inno Setup 脚本中添加一个自定义任务来实现询问用户是否设置开机自动启动,如果用户选中了该任务,则创建快捷方式。因此,在添加到启动组的快捷方式中指定的程序将在系统启动时自动运行。如果用户手动从启动组中删除了快捷方式,则程序将不再自动启动。

2023-04-20 08:51:27 3202

原创 InnoSetup 安装程序设置环境变量

InnoSetup 通过写入注册表值实现安装程序设置系统全局环境变量

2023-04-20 08:01:32 1912

原创 InnoSetup 使用 run 段实现复杂的安装任务

[Run] 区段是一种通常被忽视但简单的执行自定义安装任务的方法。首先,在您选择的开发工具(最好是创建独立的 EXE (如 C# )中编写一个小程序,以执行所需的任务,并将其 EXE 复制到脚本目录。接下来,在 [Files] 脚本区段放置一个条目,告诉安装程序将 EXE 复制到安装的临时目录 ("{tmp}"):

2023-04-20 07:43:47 583

原创 InnoSetup 使用注册表值作为默认安装目录

在 DefaultDirName 中使用 {reg:...} 常量。例如下面的这段脚本中[Setup]部分指定了默认的安装目录名称和路径。它首先尝试从注册表键中获取默认安装目录名称,如果该键不存在则使用自动检测到的程序文件夹路径再加上“My Program”作为安装目录的名称。

2023-04-20 07:20:42 1503

原创 C# Windows 窗体编程入门详解

通过学习 WinForms 框架的开发技术,你会发现很多乐趣,可以实现自己真正想要的各种 Web 无法实现的功能,实现各种桌面工具。从中领略开发带来的快乐和成就。

2023-04-16 23:06:13 5535

原创 C#演示 简单通俗讲解死锁

在多线程编程中,死锁是一个常见的问题,因为多个线程可能会竞争同一个资源,并且以不同的顺序请求这些资源。如果不加以处理,死锁可能会导致系统崩溃,因此需要采取一些措施来避免死锁的发生。这些措施可能包括使用互斥锁、避免长时间持有锁、避免嵌套锁等。

2023-04-16 19:59:09 1775

原创 C# 提取 PDF 文档中的文本

首先在 Nuget 包管理器中,安装"itext7" 和 "itext7.font-asian"。如果不安装 "itext7.font-asian" PDF 文件中有非Unicode编码的字符,将会抛出运行时异常:iText.IO.Exceptions.IOException:找不到 CMap iText.IO.Font.Cmap.UniGB-UTF16-H。安装好了这两个组件之后,使用以下代码,从PDF文件中提取出所有的文本。

2023-04-14 22:04:12 1550

原创 张赐荣 | 浅谈 UIAutomation 自动化技术在读屏软件中的应用

读屏软件工作原理【文 / 张赐荣】Windows UIAutomation 是 Windows 操作系统中的软件自动化技术,能让开发人员通过编程方式访问和操作 Windows 系统中的用户界面元素。屏幕阅读器通过调用UIAutomation API获取屏幕上的窗口控件元素和信息。例如按钮、文本框、列表等,这些元素会被转换成可读的文本或语音输出,以便盲人或低视力用户能够获知屏幕上的内容,理解应用程序的功能和布局。

2023-04-12 11:29:45 559

原创 C# 修改系统全局代理配置

[文 / 张赐荣] 许多应用程序都提供了一个图形化的界面让用户设置代理服务器。但是,有时候我们需要在程序中自动设置代理服务器,而不需要用户手动进行设置。在这种情况下,通过修改注册表的方式来设置代理服务器就非常适用。

2023-04-03 21:32:24 1509

翻译 JavaScript将文本复制到剪贴板

【文 / 张赐荣】 下面这段代码是一个 JavaScript 函数,将指定的文本复制到剪贴板中。它使用了 Clipboard API ,同时还考虑了浏览器的兼容性问题。

2023-03-29 11:25:27 1215

转载 Windows 桌面应用软件无障碍开发技术指南

近年来,随着电脑在视障群体中的不断普及,更多工作、学习、生活类的需求从线下转移到线上,但因其软件程序从业者资讯无障碍意识较弱,相关参考文档未成体系,与此同时,产品经理对视障群体的需求不了解、不知道、不清楚,开发的软件程序普遍存在资讯无法获取、功能无法操作、与辅助技术不相容等问题,使得视障群体在使用互联网过程中遇到多种障碍,面临“数字鸿沟”。为切实解决视障群体运用智慧技术困难,提升 Windows 桌面应用无障碍化水准,特制定本指南。

2023-02-16 21:21:28 639

原创 C# 使用 StopWatch 计算执行时间

【文 / 张赐荣】 System.Diagnostics.Stopwatch是一个类,它可以用来测量经过的时间。它对于代码优化和性能监控非常有用。要使用Stopwatch类,需要在代码中引用System.Diagnostics命名空间。然后,可以创建一个Stopwatch的实例,并调用它的Start和Stop方法来开始和停止计时。

2023-02-16 12:51:35 942

原创 详解 C# 方法的递归调用

整个递归过程中 GetSum()方法被调用了 4 次,每次调用时,n 的值都会递减。当 n 的值为 1 时,所有递归调用的方法都会以相反的顺序相继结束,所有的返回值会进行累加,最终得到的结果为 10。

2023-02-02 19:57:52 1233

原创 张赐荣: C# 调用 SendInput 模拟输入中文

该代码将键盘输入事件发送到操作系统以模拟文本字符串的键入。这是通过从 user32.dll 库中导入 SendInput 函数来完成的,该函数接受一个 INPUT 结构数组。 `INPUT_KEYBOARD` 类型用于指定输入事件是针对键盘的。 `KEYBDINPUT` 结构然后用于指定特定的键盘事件,包括被按下的键的虚拟键码和扫描码,以及指示键事件状态的标志。 `InputText` 方法是一个公共静态方法,它将字符串作为输入,将字符串中的

2023-01-31 21:30:32 1431 2

原创 C# 实现大写字母拆分单词算法

C# 基于首字母大写智能拆分单词算法

2023-01-10 17:25:40 1670

原创 详解 JavaScript 中 “__proto__“ 和 “prototype“ 的区别和联系

"proto" 是 JavaScript 内置的一个属性,用来访问一个对象的原型对象。而"prototype" 是所有函数都有的一个属性,指向一个原型对象。当我们使用构造函数来创建一个新对象时,新对象的 "proto" 属性会被设置为构造函数的 "prototype" 属性的值。"proto" 属性是对象的内部属性,"prototype" 属性是函数的外部属性。

2023-01-04 20:26:59 682

原创 C# 使用弱事件引用来有效避免程序内存泄漏

弱事件引用能避免内存泄漏问题,因为当事件订阅者对象被垃圾回收时,弱事件连接会被自动断开,从而避免了事件发布者无限制地保留事件订阅者对象的引用,从而导致内存泄漏。如果您不使用弱引用或弱事件,则可能导致内存泄漏,并使程序的性能下降。因此,在 C# 中,建议使用弱引用或弱事件来避免内存泄漏。

2023-01-03 19:32:55 988

原创 C# 利用 Stack (栈) 检测括号是否承兑

本案例介绍具有栈结构的泛型集合类型 Stack 的使用方法。该案例先从控制台输入一个括号表达式,然后检测括号表达式中的括号匹配是否正确。

2023-01-03 13:23:53 594

原创 C# 利用 Queue(队列) 解决舞伴配对问题

本案例主要讲解具体队列结构的泛型类型 Queue 的使用方法。案例以模拟舞伴配对为例,在舞会上,男士和女士各排成一队,组成两队等待跳舞的队伍。当舞曲开始时,依次从男士队伍和女士队伍的头部各出一人组成舞伴,直到有一队全部配对无一人剩下为止。剩下未配对的人留在等待队伍中,等待下一轮舞曲开始时,他们先参与配对。当舞曲完成时,跳舞队伍中的人回到等待队伍的末尾等待下一轮舞曲的开始。

2023-01-03 13:18:21 1252

原创 C# .Net 文件 IO 操作详细教程

System.IO命名空间中主要包含了三个类:System.IO.File: 该类提供了用于创建、复制、删除、移动、打开和关闭文件的方法。System.IO.Directory: 该类提供了用于创建、删除、移动和枚举目录的方法。System.IO.Path: 该类提供了用于获取文件和目录路径的方法。

2023-01-01 18:04:42 1111 2

原创 张赐荣: C# 使用 dllimport 调用本机 Win32 API

希望本文能帮助您了解 C# 平台调用、DllImport、Marshal 和 MarshalAs 的工作原理。

2022-12-23 09:10:18 403

原创 张赐荣: C#ADO.NET 操作Mysql 详细教程

在本教程中,我们介绍了使用ADO.NET连接到MySQL数据库的基本方法。讲解了ADO.NET的各个组件,并提供了代码示例,详细讲解了如何使用这些组件来连接、查询、更新操作数据库。还介绍了使用事务保证数据库操作的原子性的方法,并演示了如何使用数据读取器读取数据库中的数据。还介绍了使用异步数据操作来提升应用程序性能的方法,并提供了使用数据集构造器创建数据集的代码示例。

2022-12-21 14:07:42 3971

原创 张赐荣: 详解 Java 中的包装类型

包装类在Java中非常有用,它们使得我们可以将基本数据类型当作对象来使用,并提供了许多有用的静态方法。

2022-12-21 10:47:56 1101

原创 张赐荣 | Python 递归算法: 列举文件和文件夹

递归是一种算法设计技巧,可以递归地处理文件夹和文件,使用 Python 的 os 模块中的 os.listdir() 和 os.path.isdir() 函数可以方便地实现递归处理。

2022-12-20 18:25:09 826

翻译 C# 使用 extern alias 给相同程序集的不同版本设置别名

某些情况下,你可能必须引用具有相同完全限定类型名的程序集的两个版本。例如,你可能必须在同一应用程序中使用程序集的两个或多个版本。通过使用外部程序集别名,可以将每个程序集的名称空间包装到由别名命名的根级名称空间中,从而使它们能够在同一文件中使用。

2022-10-14 17:24:18 822

原创 C# .NET 按字数拆分字符串

将文本拆分为指定长度

2022-10-11 08:27:33 774

原创 C# DateTime 转友好日期时间

返回的时间格式为N分钟(或N小时,N天,N星期,N月,N年)前。

2022-10-05 11:36:54 125

原创 张赐荣 | Windows 消息处理机制 入门

【文 / 张赐荣】张赐荣 | Windows 消息处理机制 详解

2022-07-13 15:27:37 793

空空如也

空空如也

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

TA关注的人

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