自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(124)
  • 资源 (2)
  • 收藏
  • 关注

原创 C#高效编程的一些技巧

如果是派生类,初始化器会在父类的构造函数前执行,然后再执行子类的构造函数。还有一点值得注意的是,在集合中查找元素时,如果集合里是值类型,则查找出来的元素跟集合中的元素是不同的引用。如果是引用类型,则查找出来的元素跟集合中的该元素是相同的引用。在初始化数组中的元素时,将执行101次分配,101次分配要比1次分配更占用时间,分配大量的引用 类型将让堆上充满碎片。在正常编译的情况下是没有问题的,但如果更新了assembly.dll中的声明,却不重新编译ConsoleApp.exe,此时End常量的值依旧是10。

2024-09-19 10:31:52 460

原创 在WPF中自定义控件时如何选择基类

ItemsControl是封装列表控件的基类,但不支持选择,而Selector类是支持选择的控件的更具体类。尽管用户控件和普通的控件是不同的,但当希望在多个窗口中快速重用用户界面中的不变模块时(而不是创建真正的能在不同应用程序之间转移的独立控件),通过就使用该基类。这是能够显示任意单一内容的控件的基类。显示的内容可以是元素或结合使用模版的自定义对象(内容通过Content属性设置,并且可以通过ContentTemplate属性提供可靠的模板)这是常用的最低级的基类。)上或周围应用效果的元素的基类。

2024-09-19 10:29:55 197

原创 创建第一个驱动程序

简单来说,内核驱动作为Windows服务运行,在执行具体代码前,驱动SYS文件首先会被映射到内核地址空间,作为内核的一个驱动模块(MODULE),接着系统对这个驱动模块执行导入表初始化、修正重定位表中对应的数据偏移等操作,最后系统会调用该驱动模块的DriverEntry 入口函数,如果这个入口函数返回STATUS_SUCCESS,系统认为这个驱动初始化成功;因为内核驱动是作为Windows系统服务( Service)存在的,Windows系统有众多服务,如果从服务运行的环境来分区,服务分为。

2024-09-18 15:09:51 1004

原创 配置Windows内核开发环境

以前在书上看到,说现在的安全软件已经将对抗转移到内核层了,深以为然。因为像360安全卫士,腾讯电脑管家这样的安全软件,仅通过用户层api很难做到更高级的防御和控制。早些年我想获取电脑硬盘的详细使用信息,像鲁大师那样,但是一番找寻下来,并未在网上搜到满意的答案,自己所学也有限,后面索性就放弃了。最近在github上看到一款项目,实现了跟跟鲁大师类似的磁盘信息读取功能。我没有详细去看实现的代码,据我的一位不熟悉的朋友说,这里的实现是基于内核层的。

2024-09-18 15:08:07 627

原创 在WPF中保存控件内容为图片

因为这里只支持保存到流,不支持直接保存到文件,所以需要先创建文件,再进行保存。),已经介绍了控件、面板、形状都是继承自Visual类,所以都可以用于Render函数渲染。代表图像编码过的帧。像JPG、BMP这样的静态图像,整个图像只有一帧。类是表示由解码器返回并被编码器接受的图像数据。只要是Visual对象,都可以进行渲染。类的,所以我们这里选择的是第三种重载。这里具体介绍一下这两个类。对象的集合编码为图像流。在WPF介绍这篇文章中(),可以设置图像内各帧。,所以可以直接用于设置。* 通过Uri来创建。

2024-09-17 22:44:44 665

原创 Visual Studio 2019/2022 IntelliCode(AI辅助IntelliSense)功能介绍

1、官方是说IntelliCode 使用了开发者当前的代码上下文以及基于 GitHub 上数千个高度评价的开放源代码项目的模式,然后预测最可能、最相关的 API 调用的模型。如果需要关闭,可以依次打开 【扩展】-【管理扩展】-【已安装】-【IntelliCode】-【禁用】1、AI 辅助 IntelliSense,可预测供开发者使用的最可能正确的 API,而不仅仅是按字母顺序排列的成员列表。不知在多久以前,我装上了Visual Studio 2019,写代码时,就注意到了下面这样的东西:带五角星的提示。

2024-09-17 22:43:39 927

原创 WPF颜色(SolidColorBrush)和Win32颜色(COLOREF)互转的方法

附:从16进制字符串转SolidColorBrush的方法。在WPF中,在Win32颜色互相转换时,需要用到以下方法。

2024-09-16 10:51:04 393

原创 .Net Gacutil工具(全局程序集缓存工具)使用教程

打开ClassLibrary1类库工程的Properties->AssemblyInfo.cs,添加一行。Gacutil是用于对GAC进行管理的工具,它随 Visual Studio 一起安装。像平常我们在Visual Studio中引用系统程序集时,这些程序集便来自于。是程序集的标识符,取决于 reference_scheme。全局程序集缓存,是用于存放.Net应用程序共享的程序集。这个时候,我们再去查看该程序集,就可以看到如下详细信息了。1 gacutil.exe /i "程序集路径"

2024-09-16 10:50:00 694

原创 Visual Studio 中的Code Snippet(代码片段)功能介绍

用于标识当前的代码片段用于哪种编程语言,可选项(VB、CSharp、CPP、XAML、XML、JavaScrip、TypeScript、SQL、HTML)(这个选项是必需的)7   DateTime.Now的代码片段表示在文档中选择的要在调用时插入代码段的文本(如果定义了字面量,会直接选择字面量,当按下回车后,会跳到。在工具菜单下,选择【代码片段管理器】项,可以打开代码片段管理器。:用于标识 代码片段可以用于哪个位置。

2024-09-15 14:43:01 840

原创 C#命令行参数解析库System.CommandLine介绍

System.CommandLine是一个基于.Net Standard 2.0(支持.Net FrameWork 4.6.1.2+和.Net Core 2.0+)的命令行参数解析库,项目地址 https://github.com/dotnet/command-line-api,目前,该项目还是属于beta状态,期待以后的正式版本。1、RootCommand是顶级命令,RootCommand可以添加Command,Command又可以再添加SubCommand。如此可以无限循环,没有限制。

2024-09-15 14:41:41 1034

原创 如何删除git提交记录

查了下资料,终于找到简单粗暴的方式来删除提交记录。这样操作完成后,服务器最近的两次提交记录已经看不到了。今天在提交github时,不小心提交了敏感信息,不要问我提交了啥,问就是不知道。

2024-09-14 11:28:42 766

原创 C#使用Access数据库使用总结

话说这Access数据库确实是有点年代了,前面在深圳的一家放射医疗公司,数据库用的Access,后面在我的建议下,换成了SQLite。上面已经使用过参数了,这里需要注意的时,不能直接传DateTime类型,而是需要传入字符串,不然会报错。有时候可能查询的语句比较简单,就不想使用参数的形式的,直接去拼SQL语句,如果判断的条件是日期,就要用##将日期包起来,不然会报错,如下。回到长沙后,找了一家工业仪器的公司,发现也是用的Access数据库。例如在Access中直接执行模糊查询语句,查询包含z的姓名。

2024-09-14 11:26:05 772

原创 提取msi安装包中的文件

如果需要提取msi安装包中的文件,也可以使用。在前面的文章中介绍过如何使用。安装包中文件存放的路径,如。这个程序执行自动化安装(

2024-09-13 09:28:59 133

原创 如何在Windows下安装jekyll

一开始配置的时候看官方文档上面说要安装GCC和MAKE,我折腾了好久,后面才发现,在Windows环境下只需要一个安装包就可以了,就是我前面说的带devkit的安装包。因为官方是推荐Linux搭建吧,所以我第一次搭建也是花了点时间查资料的,这里做个总结,给后面有需要的小伙伴做个参考。这里我主要了解了一下hexo和jekyll,最终选择了jekyll,因为看到有一些MVP的大佬也在用。前面我下载的是不带开发包的安装包,那个安装包是没有画红线这个选项的,结果后面怎么都执行不成功。至此jekyll就安装成功了。

2024-09-13 09:26:28 647

原创 如何让.NET Core工程同步输出到.Net Framework

【代码】如何让.NET Core工程同步输出到.Net Framework。

2024-09-12 14:05:28 280

原创 WPF创建不规则窗体时WebBrowser控件不显示的问题

最近有小伙伴需要在不规则窗体上放置WebBrowser控件,因为设置了WindowStyle="None" 和 AllowsTransparency="True"。//这里可以控制宽高。导致这个问题的原因是因为空域(airspace)问题,因为WebBrowser并不是一个原生的WPF控件,而是一个Win32控件。//point是左上角0,0的位置。//这里可以控制位置。

2024-09-12 14:02:37 1183

原创 SQL Server开启网络访问

目前工作中很少用到SQL Server了,最近需要测试几个表,需要搭建一个SQL Server数据库服务,这里做个总结吧。配置完成后,重启SQL Server服务。按正常情况下,到这一步就可以通过网络访问SQL Server数据库了。打开SQL Server配置管理器,展开SQL Server 网络配置,找到TCP/IP。安装这里就不做详细介绍了,本文只介绍如何开启SQL Server网络访问。保存后,重启SQL Server服务,可以正常网络访问。IPALl这里,填入49295和1433,如下。

2024-09-11 14:39:50 804

原创 C#如何简单地组合linq查询条件

6 students.Add(new Student() { Name = "雍心慈2", StudentID = "2" });使用EF后,也遇到同样的问题。在linq中是可以利用表达式树来实现组合条件查询的功能,但是需要一定的学习门槛。像以前没有使用EF时,对于从界面输入的多条件查询时,都是使用SQL语句的拼接,因为使用了哪几种条件是未知的。如果你已经了解了基本的linq语法,但是又暂时没有时间学习表达式树,可以试试以下的简单方法。//循环执行过滤条件。

2024-09-11 14:38:04 1266

原创 解决Windows Server 2012加密套件过时的问题

在网上查了一下,得出的大概结论就是这种AES_128_GCM的加密算法,比AES_256_CBC的更安全快速,而这种AES_256_CBC加密套件被360标记为已过时。一直以为是.cn域名的问题,后面才发现是IIS上面加密套件过时的问题。因为我在安装所有的可用更新后,系统出现了问题,跟InternetExplorer有关的内容全部打不开了,组策略也显示不出来了,这里没办法截图了。“计算机配置”“管理模板>”“网络 > SSL 配置>设置”下的“SSL 密码套件顺序”,为要启用的所有密码套件配置优先级列表。

2024-09-10 15:20:05 333

原创 在WPF中使用矢量图标

IconFont是包含符号和字形而不是字母或数字的字体。它们在网络设计人员中很受欢迎,因为可以用CSS与常规文本相同的方式设置样式。另外,它也是矢量的。最初IconFont是在Web开发中广泛使用的,但是也可以放到WPF中进行使用。

2024-09-10 15:18:03 1325

原创 如何在Visual Studio中调试.NET源码

有时候如果我们想在Visual Studio中单步调试.NET的源码,可以按下面的方式操作。今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。测试了一下,大量数据情况下,耗时几乎都是0ms,所以应该差别不大。我一般的做法是先判断是否为null,再判断Count。(仅.NET Core)仓库里的源码,找到对应的文件。此时再调试时,就能单步调试.NET源码。如果提示找不到某个符号,可以下载。

2024-09-09 12:02:56 837

原创 Win32使用邮槽(Mailslots)进行进程间通信

如果域中的多个进程都使用相同的名称创建mailslot,则发送到该mailslot并发送到域的每条消息都将由参与进程接收。由于一个进程可以控制服务器 mailslot 句柄和在打开 mailslot 进行写入操作时检索的客户端句柄,因此应用程序可以轻松地在域中实现简单的消息传递工具。如果函数成功,则返回值是 mailslot 的句柄,用于服务器 mailslot 操作。它的作用是:使用指定名称创建 mailslot,并返回 mailslot 服务器可用于对 mailslot 执行操作的句柄。

2024-09-09 11:57:30 713

原创 如何读.Net Framework 的源码?

很早以前就用.Net Reflector去看.Net的源码,但是每次碰到内部调用,就没有办法深入了解了,最近也是一次偶然的机会,我知道 了这些内部调用是在cli中实现的,而cli的最新源码也是开源 的,所以才有了这篇文章。在.Net Framework中,实际上也是调用的这个函数,只是做了多层封装。因为这些是在cli中实现的。但这里要提一句的是,Windows API内部是如何实现的,这个我没有去了解过,以我现在的能力,估计也理解不了内部的实现逻辑,如果有小伙伴略懂一二,也可以在下面的评论教 教 我。

2024-09-07 23:37:39 1708

原创 Win32函数调用约定(Calling Convention)

在__cdecl调用约定下,函数的多个参数由调用者按从右到左的顺序压入堆栈,被调函数获得参数的序列是从左到右的,清理堆栈的工作由调用者负责,因为函数参数的个数是可变的。__fastcall调用约定称为快速调用约定,前两个双字(DWORD)参数或更小尺寸的参数通过寄存器ECX和EDX来传递,剩下的参数按照自右向左的顺序压栈传递,清理堆栈的工作由被调用者函数来完成。调用约定下,函数的多个参数由调用者从右到左的顺序压入堆栈,被调函数获得参数的序列是从左到右的,清理堆栈的工作由被调用函数负责。

2024-09-07 23:35:36 798

原创 Win32中的字符串

推荐使用Unicode字符集,Unicode字符集支持的字符更多,就不用担心区域化时,字符显示乱码的问题。在新版本的API函数中,也将会只有Unicode的版本,而没有ANSI版本。需要注意的是,有些头文件会使用预处理器符号UNICODE,而有些头文件使用_UNICODE,所以在Visual Studio 创建项目时,这两个符号都会被定义。针对不同的字符版本,微软的C运行时库也定义了许多相似的宏,用于区分Unicode和ANSI,如。为了更方便的使用Unicode和ANSI字符,系统还定义了如下宏。

2024-09-05 09:19:07 390

原创 Windows中的页交换文件(paging file)

它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。当应用程序调用VirtualAlloc函数来把物理存储器提交给地址空间区域时,该空间实际上是从硬盘上的页交换文件分配得到的。从应用程序的角度来说,页交换文件以一种透明的方式增加了应用程序的可用内存,保留、提交或更改调用进程的虚拟地址空间中页面区域的状态。在以前经常可以见到教大家调整虚拟内存的文章,因为那个时候的硬件配置还没有像现在这么好。

2024-09-05 09:17:16 171

原创 Win32创建虚拟打印机

拿到Microsoft Print to PDF的打印机参数后,其它参数不变,只更改打印机名称,调用AddPrinter创建一个新打印机。创建端口后,调用EnumPrinters函数枚举打印机,找到Microsoft Print to PDF打印机。1、安装Microsoft Print To PDF虚拟打印机,该打印机可以将所有打印数据转换为PDF。2 /// 根据Microsoft Print To PDF创建新虚拟打印机。4、设置新虚拟打印机的端口为新创建的端口。2 /// 创建本地打印机端口。

2024-09-04 16:36:40 1040

原创 Win32绕过UAC弹窗获取管理员权限

到这一步我们就可以以提升过的权限执行对应 的程序 ,如果执行COM Elevation Moniker的程序身份是不可信的(未签名/签名不受信息/已过期等),则会触发UAC弹窗,如果是可信的,就不会触发UAC弹窗。在早些年写一些桌面软件时,需要管理员权限,但是又不想UAC弹窗,所以一般是直接将UAC的级别拉到最低,或者直接禁用UAC的相关功能。关于UAC这里仅做简单介绍,可以在文末的参考资料里获取关于UAC的更详细的介绍。绕过UAC弹窗目前流行的有几种方案,这里只介绍基于COM组件的。

2024-09-04 16:34:59 1702

原创 Win32获取系统图标

使用SHGetStockIconInfo函数可以获取系统定义的 Shell 图标的信息。:以下零个或多个标志的组合,这些标志指定请求的信息。:指向SHSTOCKICONINFO 结构的指针。SHGetStockIconInfo函数。枚举中的值之一,指定应检索哪个图标。

2024-09-03 14:54:55 495

原创 Win32远线程注入

也就是说,虽然进程不同,但是开机后,kernel32.dll的加载基址在各个进程中都是相同的,因此导出函数的地址也相同。那么,可将LoadLibrary函数的地址作为多线程函数的地址,某个DLL路径字符串作为多线程函数的参数,并传递给CreateRemoteThread函数在目标进程空间中创建一个多线程,这样能不能成功呢?此值不能与任何其他值一起使用。指向由线程执﹐行类型为LPTHREAD_START_ROUTINE的应用程序定义的函数指针,并表示远程进程中线程的起始地址,该函数必须存在于远程进程中。

2024-09-03 14:52:53 1341

原创 Win32设备I/O详解

这个参数既可以标识一个已经打开的文件的句柄,也可以是 NULL。使用CreateFile打开文件时,文件指针的读取位置会被默认设置为0,如果调用ReadFile函数从文件读取了10个字节到内存中,那么系统会更新文件指针。不同的设备有不同的设置函数,以串口为例,设置串口参数使用的是setCommConfig函数,这里不作具体介绍,实际使用时,可以查阅MSDN文档。//读取10-19字节。在前面的文章中,介绍了mailslot的使用,它就是属于设备的一种,并且它的读取和写入跟文件读取写入用的是一样的函数。

2024-09-02 23:59:19 1309

原创 WPF MVVM如何在ViewModel直接操作控件对象

后面的解决办法是在窗口加载时,将控件对象以参数传递到Loaded事件的处理命令中,然后将这个对象记录下来,后面就可以直接操作这个控件了。早些年在WPF中使用COM组件时,需要在ViewModel中操作COM组件中的控件对象,但是这个控件对象又不支持绑定,今天同事在使用WebView2的时候,又遇到这个问题,写个文章分享一下,给后续需要的小伙伴提供点参考。我们创建一个WPF的项目,然后在界面上放置一个WMP控件(Windows Media Player)。

2024-09-02 23:58:25 1417

原创 PE文件结构详解(非常详细)

1 //大小为: 0x40(64)字节3// MZ标记 0x5a4d// 最后(部分)页中的字节数// 文件中的全部和部分页数// 重定位表中的指针数// 头部尺寸以段落为单位// 所需的最小附加段// 所需的最大附加段// 初始的SS值(相对偏移量)// 初始的SP值// 补码校验值// 初始的IP值// 初始的SS值// 重定位表的字节偏移量// 覆盖号// 保留字// OEM标识符(相对m_oeminfo)// OEM信息// 保留字。

2024-08-31 23:01:31 1315

原创 如何在JPG文件中隐写数据

最近在做资源管理器背景的一个功能时,需要将信息传递到DLL中去,主要就是传递一些比较简单的参数,包括图片的契合度,透明度之类的。通信方式有多种,毕竟是练手的功能,就想找一些以前没用过的方式。在我前面的文章中,介绍过数字水印技术,其中的两种方式就是在图像文件中嵌入数据。

2024-08-31 22:29:57 893

原创 C#如何获取用户头像

如果有多个文件,取最近修改的那个文件即可。直接通过下面的代码可以获取所有头像文件。格式,我们通过下面的方式提取即可。不过获取出来的文件是。

2024-08-30 16:25:32 668

原创 C#如何查看/写入日志到Windows事件查看器

7 EventLog.WriteEntry("MyApplicationLogSource", "测试日志内容",EventLogEntryType.Warning,100010);8 EventLog.WriteEntry("MySource", "你可以指定日志内容", EventLogEntryType.Warning, 10010);像平常我们开发的程序如果想更方便的查找错误,除了本地日志外,还可以将日志写入到Windows事件日志中的【应用程序和服务日志】类别下,可以方便我们快速查找问题。

2024-08-30 16:24:12 1189

原创 Windows服务器下配置Gogs HTTP自动跳转HTTPS

找了一圈没找到如何在Gogs配置同时启用HTTP和HTTPS,并且HTTP自动跳转HTTPS。,在HTTP重定向这里直接填这个网址就好了。这样在以http访问时,会自动跳转。

2024-08-28 14:53:43 275

原创 如何使用Gogs搭建自己的git服务器

最近偶然发现一款轻量级的git服务器,以前一直用的svn server,最近想搞个git服务器, 用gitlab资源占用太多了,gogs是一款轻量级git服务器,非常适合个人使用。到Git官网http://git-scm.com/downloads,下载并安装git,这里不做介绍,直接安装即可。因为我服务器不会经常重启,如果有重启,准备手动去开gogs,所以也没去详细了解NSSM工具的使用了。对模板文件进行修改,修改完成后,重启gogs即可。,下载对应的模板文件,然后放到templates。

2024-08-28 14:52:37 734

原创 给自己的几点建议

增强分析问题,解决问题的能力。坚持总结归纳问题的习惯;

2024-08-27 16:04:20 294

原创 C#操作剪贴板

System.Windows(WPF)或System.Windows.Forms(Winform)下。1 data.GetDataPresent(typeof(Bitmap)) 返回true。7 MessageBox.Show("剪切版为空");从剪切板上获得数据不影响剪贴板的内容,GetData的返回值是存储在剪贴板上的副本。如果设置为false,或者不设置,将在程序运行结束后不保留剪切板内容。要想从剪切板获得一个对象,可以调用 GetData()方法。

2024-08-27 15:57:44 551

codeblocks-20.02mingw官网下载,codeblocks官网的资源下载太慢,做一个搬运

codeblocks-20.02mingw官网下载,codeblocks官网的资源下载太慢,做一个搬运

2024-08-23

inkscape-1.3.2 portable-2023-11-25(强大免费的设计工具Inkscape)

官网下载太慢了,这里做一个搬运。

2024-03-08

在WPF中对现有图像进行绘制的两种方法

在WPF中对现有图像进行绘制的两种方法。第二次上传资源。

2017-10-25

WPF图片放大镜

实现了类似电商网站商品浏览的效果,比例计算不是非常精确 ,仅供参考。。。第一次上传资源 。

2017-10-24

空空如也

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

TA关注的人

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