如果在本博客下载附件后需要解压密码,请尝试本站域名作为解密密码:www.skyfinder.cc

 分类:C#

使用C#通过NTP同步本地Windows系统时间

每年春节买票都成为相当重要的事情,快人一步基本能尽可能的抢占先机。使用抢票软件尽可能的减少手工操作,从而提高抢票的成功机率,由于时间误差也可会丧失先机,所以同步系统时间也是重要一步。为了可以自动的同步本地时间,所以就使用C#实现一个时间同步小工具。 只针对Windows系统的时间同步且使用抢票平台的不在此列。 using System; using System.Net; using System.Net.Sockets; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; namespace WindowsDateTimeSynchronization { public class Da...

3周前 (02-08) 23℃ 0评论 0喜欢

ML.NET 来对鸢尾花分类

主要目的演示如何使用 ML.NET 为鸢尾花数据集构建聚类分析模型。了解ML.NET使用基本流程。 问题 问题的本质即基于花卉特征将鸢尾花数据归入不同的组。 这些特征包括:花萼的长度和宽度以及花瓣的长度和宽度。 需通过这些特征了解数据集的结构,并预测数据实例与此结构的拟合相似分类。 创建控制台应用程序 打开 Visual Studio。 从菜单栏中选择“文件” > “新建” > “项目”。 在“新项目”对话框中,依次选择“Visual C#”和“.NET Core”节点。 然后,选择“控制台应用程序(.NET Core)”项目模板。 在“名称”文本框中,键入“MLNet”,然后选择“确定”按钮 在项目中创建一个名为“数据”的目录来保存数据集和模型文件: 在“解决方案资源管理器”中,右键单击项目,然后选择“添加”...

9个月前 (05-27) 162℃ 0评论 0喜欢

C#访问https “未能创建 SSL/TLS 安全通道”异常

C#使用HttpClient访问https请求被中止: 未能创建 SSL/TLS 安全通道(Could not create SSL/TLS secure channel)。 添加回调:ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationCallback);还不行, 添加: ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; private bool CheckValidationCallback(object sender, X509Certificate certificate,...

11个月前 (03-23) 307℃ 0评论 1喜欢

数据驱动之表驱动编程

前提背景在清理以前相关代码时候,发现了之前使用表驱动的部分函数。所以,在这里简要的记录一下。 定义 数据驱动编程的核心出发点是相对于程序逻辑,人类更擅长于处理数据。数据比程序逻辑更容易驾驭,所以我们应该尽可能的将设计的复杂度从程序代码转移至数据。 所谓表驱动法(Table-Driven Approach),简单讲是指用查表的方法获指定的数据内容。 常用的查表方式 直接查询索引查询 分段查询 如果要把星期几用中文输出,无论是用if语句或switch语句都比较臃肿,如下: static string GetChineseWeek(DayOfWeek week) { switch (week) { case DayOfWeek.Monday:...

1年前 (2019-01-06) 217℃ 0评论 8喜欢

C#在图片指定位置添加水印(支持透明)

因某些原因需要在图片上添加文字水印、图片水印,所以这里做个简单的记录。本想在互联网上找到相关代码直接使用,经过一些测试发现并不适合目前的要求,所以就重新整理代码。 未加水印前 添加水印后 代码实现 using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Watermarker { /// <summary> /// 水印设置 /// </summary> public class WatermarkSettings { /// <summar...

1年前 (2019-01-04) 450℃ 2评论 14喜欢

C#封装常用的Windows API函数

Windows API Windows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外, 它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程式达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application), 所以便称之为 Application Programming Interface,简称 API 函数。WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口。 C#调用Windows API C#调用Windows API之调用格式,在.Net Framework SDK文档中是比较零散。但在C#中使用Windows API最常见的方式是用DllImport 来进行处理,并 使用 C# 关键字 static 和 extern 声明方法...

1年前 (2018-12-27) 450℃ 0评论 10喜欢

C#实现图片转Base64编码

Base64就是一种 基于64个可打印字符来表示二进制数据的表示方法。 Base的索引表 Base64的索引表,字符选用了”A-Z、a-z、0-9、+、/” 64个可打印字符。数值代表字符的索引,这个是标准Base64编码规定的,如下图: base64编码表 Base64的原理 Base64的码表只有64个字符, 如果要表达64个字符的话,使用6的bit即可完全表示(2的6次方为64)。 因为Base64的编码只有6个bit即可表示,而正常的字符是使用8个bit表示, 8和6的最小公倍数是24,所以4个Base64字符可以表示3个标准的ascll字符; 如果是字符串转换为Base64码, 会先把对应的字符串转换为ascll码表对应的数字, 然后再把数字转换为2进制。 图片转化为base64 图片的 base64 ...

1年前 (2018-12-26) 444℃ 0评论 0喜欢

.net C#实现IE浏览器缓存清除

情况背景 之前朋友让模仿的一个QQ群验证的Windows Form程序,需要加清除缓存的功能。关于判断登录的QQ是否已经加入指定的QQ群点击查看。由于使用的是.net 自带的WebBrower控件,其本身也是IE浏览器,所以只需要清除IE浏览器的缓存就可以了。这里调用RunDll32.exe来实现IE浏览器的缓存清除! QQ 群验证 代码实现 public void IEClear() { try { Process process = new Process(); process.StartInfo.FileName = "RunDll32.exe"; process.StartInfo.Arguments = "InetCpl.cpl,ClearMyTracksByProcess 255"; process.Sta...

1年前 (2018-12-17) 304℃ 0评论 3喜欢

C#获取文件的文件的MIME Type(Content-Type)的方法

什么是MIME MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。 它是一个互联网标准,扩展了电子邮件标准,使其能够支持: 非ASCII字符文本;非文本格式附件(二进制、声音、图像等);由多部分(multiple parts)组成的消息体;包含非ASCII字符的头信息(Header information)。 这个标准被定义在RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等RFC中。 MIME改善了由RFC 822转变而来的RFC 2822,这些旧标准规定电子邮件标准并不允许在邮件消息中使用7位ASCII字符集...

1年前 (2018-12-04) 269℃ 0评论 0喜欢

C#按照像素对图片进行放大

C#对图片进行放大且按照像素,使用C#指针(要启用非安全代码)。   using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.IO; namespace ImageMagnifier { public class MagnifierImage { private int multiple = 2; public int Multiple { get { return multiple; } set { multiple = value; } } public Magnifier...

1年前 (2018-12-01) 295℃ 0评论 0喜欢

C#实现共享内存

共享内存 共享内存指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。任何一个缓存的数据被更新后,由于其他处理器也可能要存取,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。共享内存是 Unix下的多进程之间的通信方法 ,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。 C#  调用Win32 系统APi实现共享内存: public class ShareMem { [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr SendMessage(IntPtr hWnd, int Msg,...

1年前 (2018-11-30) 533℃ 0评论 0喜欢

C#简单实现HTTP文件上传

之前对接一个接口,实现加密文件上传,于是写了一个简单的方法进行调用。 public static class HttpUtil { /// <summary> /// 向指定的URL进行post /// </summary> /// <param name="url"></param> /// <param name="bodyPartList"></param> /// <returns></returns> public static string MultipartPost(string url, List<FormBodyPart> ...

1年前 (2018-11-15) 362℃ 0评论 0喜欢

判断登录的QQ是否已经加入指定的QQ群

一、背景 朋友给了一个小的Windows应用程序,打开这个应用程序会让登录QQ,然后会判断登录的QQ是不是已经加入了指定的QQ群。如果已经加入,则可以继续使用软件,否则就退出这个程序,大致就是这样。朋友希望知晓这种判断qq是否加入指定QQ群的方法。如下图: 二、分析 这里使用fiddler进行抓包看一下,通过抓包结果来看,这个程序首先访问了http://qun.qzone.qq.com/,然后进行了授权登录,登成功之后就会回调到http://qun.qzone.qq.com/上,然后所有群号一览无余,就可以判断指定的群号了,基本上就是上图看到的界面了。fiddler抓包图如下: 三、实现 这里使用Microsoft .net的Windows Form实现,使用WebBrowser控件加载http://qun.qzone.qq.com/,登录成功只有使用正则匹配指定的群号来完成操作。代码...

1年前 (2018-10-21) 463℃ 0评论 5喜欢

C#利用ICSharpCode.SharpZipLib.dll实现对文件的压缩与解压

因为程序中需要对指定文件进行压缩,然后再对已压缩的文件进行加密上传,所以,在网上找了一个已经实现的方法就用了。结果不用不知道,用了就差点挂掉,网上找到的类中解压会出问题,竟然能多出很多数据,压缩多级目录竟然出现目录错乱等诸多问题。最终,对出现的问题也进行了相关的修改(未发现的问题就不晓得了),利用C#的开源组件ICSharpCode.SharpZipLib实现,以下对代码就做下记录。 public static class ZipUtil { #region 压缩 /// <summary> /// 递归压缩文件夹的内部方法 /// </summary> /// <param name="folderToZip">要...

1年前 (2018-10-04) 389℃ 0评论 0喜欢

C#封装windows系统化shutdown功能类

/// <summary> /// 封装了一些ShutDown中的功能 /// </summary> public sealed class ShutDown { private ShutDown() { } [StructLayout(LayoutKind.Sequential, Pack = 1)] private struct tokpriv1luid { public int count; public long luid; public int attr; } [DllImport("kernel32.dll", Exac...

1年前 (2018-10-03) 227℃ 0评论 0喜欢

C#文本文档类型转换(dos2unix、dos2mac、unix2dos、mac2dos、unix2mac、mac2unix)

由于某些业务需要与银行进行交互,我们提交相应的批次文件银行处理,但是银行要求的文本文件格式为Unix,所以需要进一步处理。如果一个文件还可以用编辑器转换一下,但是数量稍微多再使用编辑器转换就太累了。 Windows、Linux、MAC的文本文件换行回车格式不同,基于 Windows系统 的文本文件类型是DOS在每一行末尾有一个 CR(回车)和 LF(换行),而 Linux系统的文本文件类型是Unix只有一个 LF(换行),MAC系统的文本文件类型是mac一个 CR(回车)。 对于换行这个动作,unix下一般只有一个0x0A表示换行(“\n”),windows下一般都是0x0D和0x0A两个字符(“\r\n”),苹果机(MAC OS系统)则采用回车符CR表示下一行(\r) Unix系统里,每行结尾只有“<换行>”,即“\n”; W...

1年前 (2018-09-20) 727℃ 0评论 6喜欢

C#实现字节数组高低位转换

今天,在百度网盘突然看到文章分类中有一些内容,仔细一看都是很久很久之前在百度空间发的一些日子内容,由于2015年百度空间关闭,百度空间中相关博文被迁移到百度云中且仅自己可见。曾经很久没有关注过的一些东西又被意外发现,于是决定重新记录下来。以下是使用C#实现关于字节高低位转换的一个方法,记得之前是有物联网接入,上位机数据被读取并且存储到服务器,而当中数据都是高低位颠倒的,在解析的时候需要将高低位进行转换。当时为了解决这个问题,就这么写了!大概是这么个情况!!!!   /// <summary> /// 字节数组高低位转换 /// </summary> /// <param name="sourceByte"></param> /// <p...

1年前 (2018-09-18) 452℃ 0评论 0喜欢

C#通过探测邮件服务器进行Email地址效验

Email地址包括两个部分:用户名和邮件服务器。因此,检验邮件地址可以分为两步进行:首先检验邮件服务器,然后检验用户名。如 sky@qq.com,首先检验qq.com服务器是否是有效的邮件服务器,如果是再在该服务器上确认是否存在sky用户。当然这检测种方式也并不是百分之百有效,有些服务器不允许检测、有些服务器返回的是错误的信息,这些时候检测结果都是不正确的。 通过查询DNS服务器,获取域名的MX(Mail Exchanger)记录,可以确定某一域名对应的邮件服务器是否有效。在Windows系统中,可以使用nslookup程序来查看这一记录。 public class EmailCheckHelper { TcpClient tcpc; NetworkStream s; string strDomain; byte[] bb; in...

3年前 (2017-07-04) 395℃ 0评论 0喜欢

C#实现简单工厂模式

在面向对象程序中,我们经常看到一种模式就是简单工厂模式(Simple Factory Pattern)。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个共同的父类和共同的方法,但每个方法执行的任务不同,而且根据不同的数据进行了优化。简单工厂模式实际上不属于23个GoF模式,但它可以作为学习工厂方法做铺垫。 一、UML类图,简单工厂基本类图 二、代码演示 /// <summary> /// 产品抽象类 /// </summary> public abstract class Product { public abstract void CreateProduct(); } /// <summary> /// 具体产品A /// <...

3年前 (2017-02-02) 377℃ 0评论 0喜欢

C#获得Excel第一个工作表的名称

private string getExcelSheetFirstNameFor(string path) { string firstName = ""; Excel.Application objExcelApp = new Application(); objExcelApp.Visible = false; objExcelApp.DisplayAlerts = false; Workbooks objWorkbooks = objExcelApp.Workbooks; _Workbook objWorkbook = null; _Worksheet objWorksheet = null; object objMissing = System.Reflection.Missing.Value; try { objWork...

3年前 (2017-01-06) 410℃ 0评论 0喜欢

C#实现多个文件(mp3)合并

友情提示以下所诉的音频合并仅仅针对mp3,其他类型音频文件可能存在差异,敬请注意。 公司项目存在多媒体叫号功能,此功能在XP系统上读的速度是可以的,但是在Window7以及以上版本系统读的速度非常慢(不连贯,难以接受)。现在实现方式根据信息拼接了不同的MP3文件,然后进行顺序读取。但是很奇怪为什么在更高版本系统中使用会变的异常的慢,让人难以接受。为了解决这个问题想到了2个方案: 使用flash音乐播放器进行列表播放,但是很多的网页播放器不具备与JavaScript交互的功能,甚至没有列表播放功能。(没有发现其他好用的播放器)对多个MP3文件进行合并后进行播放 经过测试否决了第一种方式,因为压根没有找到一款适合的网页播放器,重新写太费时间了。第二种方式可以解决问题。所以就使用了这个简单的方法来修改现有叫号功能在高版本系统播放缓慢的问题。基本代码如下: using Sy...

3年前 (2016-12-15) 1198℃ 6评论 8喜欢

关于Zxing.net 自动解码Code39的BUG

使用Zxing.net进行一维条码识别,如果自动识别解码对Code39条码解码的情况下可能会出现解码错误的情况(这里的错误是指解码后的数据和原来进行编码的数据不一致,进行编码的数据均为Code39的合法字符)。原因:自动解码会尝试目前所有支持类型的解码,包括Code39Extended模式。Code39和Code39Extended 是相同的方法处理,在进行Code39解码后会判断是否使用了Code39Extended模式,使用了扩展的话就会再次对返回的结果进行Code39Extended解码。文件所在位置:lib\oned\Code39Reader.cs   代码如下: /* * Copyright 2008 ZXing authors * * Licensed under the Apache License, Version 2.0 (the "License"); ...

4年前 (2016-08-19) 488℃ 0评论 0喜欢

谷歌百度以图搜图感知哈希算法之C#简单实现

在谷歌百度以图搜索中, 用户可以上传一张图片, 谷歌百度显示因特网中与此图片相同或者相似的图片. 第一步:将图片缩小到8×8的尺寸,总共64个像素。这一步的作用是去除图片的细节, 只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。 第二步:将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。 第三步:计算所有64个像素的灰度平均值。 第四步:将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。 第五步:将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序。 第六步:计算”汉明距离”(Hamming distance),如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。 usi...

4年前 (2016-08-18) 553℃ 0评论 2喜欢

关于DllImport调用非托管dll出现“无法加载DLL’*.dll’,找不到指定的模块”错误

项目中有短信发送模块,由于SP提供的SDK升级。在项目中需要新增SDK的版本。新版本新增的同时要更新旧版本的Dll引用方式,旧版本之前通过DllImport引用使用绝对路径。地址更换后,在操作短信发送的时候就会报“无法加载DLL’*.dll’,找不到指定的模块”。(相关的DLL已经放到Bin目录下)。 当使用绝对路径或者把相关DLL拷贝到系统目录(C:\WINDOWS\system32)后,此类错误不再出现。虽说问题得以解决,但无论是绝对路径还是把相关DLL放到系统目录,这都不是很好的解决办法。很多服务器是不允许在非网站应用程序下新建文件的。而在网上基本都是三种解决方案,如下: 1、将相关的DLL拷贝到Bin目录下 2、将相关的DLL放到系统目录(C:\WINDOWS\system32) 3、使用绝对路径,例如:E:\dll\xxxx.dll 以上三种解决方案在不同...

4年前 (2016-08-16) 389℃ 0评论 0喜欢

C#获取指定文本文件的编码格式

在某些情况下对文本文件进行读取会出现乱码,这种情况是因为指定的文本文件的编码类型不是系统默认的编码类型或者不是读取时指定的编码类型。解决这种出现乱码的情况可以先获取指定文本文件的编码类型,然后在进行内容的读取。这样尽可能的避免读取文本文件时出现乱码的机率。代码如下: /// <summary> /// 获取指定文件的编码 /// 以防止在不知道文件编码格式的情况下处理文件而造成的乱码问题 /// </summary> /// <param name="filename">文件路径</param> /// <returns></returns> public System.Text.Encoding GetFileEncodeType(string filename) { if (!File.Ex...

4年前 (2016-07-19) 357℃ 0评论 0喜欢