C#收集中控ZKTeco考勤数据

  • 0.前言
  • 1.事前准备
    • 1.ZKTeco软件
      • 1.新建一个存放各个子公司的mdb文件夹
      • 2.新建一个中控软件所指定的mdb文件夹
      • 3.在中控设置自动下载
      • 4.调出日志文件
        • 连接失败样例
        • 连接成功样例
      • 5*.查看mdb主表字段意义
    • 2.C#程序
      • 1.项目中增加一个 Application Manifest File
      • 2.项目配置x86
      • 3.添加考勤目标配置文件
  • 2.C#代码
    • 1.引用
    • 2.实体类
    • 3.工具类
    • 4.调用
    • 5.运行效果
  • 3.结语

0.前言

项目背景:全公司有近千员工分布在全市各处,一个考勤机只能收录500名员工,且由于人事培训不足导致分公司人事录入的员工操作时,录入数据并不在同一个数据库(mdb),导致同一个员工在不同分公司的中控数据库中使用不同的【数据库id】和【工号】

加上中控软件目前的局限性,不能简单的将各个考勤机同时使用收录到同一个数据库(mdb)中,引起用户id相互覆盖的导致考勤数据错乱,因此要做到自动下载、更新并收集所有考勤信息到本地或者其他平台的程序思路流程设计如下:

PS.用钩子貌似也行~

1.事前准备

1.ZKTeco软件

1.新建一个存放各个子公司的mdb文件夹

实际可按需选择新建的地址,或者直接在编程里再分别指定子公司mdb,文件夹名称也可以随看客自己决定,这里为了方便展示就直接新建个【mdbs】到安装目录

2.新建一个中控软件所指定的mdb文件夹

同样按需设置

3.在中控设置自动下载

这里的时间间隔【2min】按照当前实际项目所涉及考勤机收录的人员数量设置,也可以按实际一次(选中全部机器)【从设备下载记录数据】的时间设置
PS.旧版本会有时间间隔过短可能会导致一个没下完,下一次又开始导致中断

4.调出日志文件

记得在修改【Option.dat】前需要等软件完全关闭!


连接失败样例

连接成功样例

5*.查看mdb主表字段意义

在安装目录用文档软件打开【sqlserver.sql】文件

2.C#程序

1.项目中增加一个 Application Manifest File

在项目中增加一个 Application Manifest File
用于C#程序使用【管理员】权限运行/关闭中控软件

2.项目配置x86


设置好后可能会有下图提示,点第一个就行~

3.添加考勤目标配置文件

这里项目要求只收集某几个人的考勤所以设计如下:

2.C#代码

1.引用

using Fx_SynTool.Syn;
using Fx_SynTool.Utils;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Threading;

2.实体类

存放考勤数据信息的实体类,可按需调整
人名(【USERINFO】表)基本都是唯一的,有重名的话可以在重名后面加个数字区分,数据源在ZKT数据库mdb里的,然而一个人只能在一个时间点对一台机器(【MACHINES】表)打一次卡(【CHECKINOUT】表),对象构造就是【某人在某段时间里分别对N个机器的N次打卡】;

     /// <summary>/// 考勤设备信息/// </summary>public class ZKTimeMachineMsg{public ZKTimeMachineMsg(string machineAlias, string ip, string sn){this.machineAlias = machineAlias;this.ip = ip;this.sn = sn;}/// <summary>/// 录入设备名称/// </summary>public string machineAlias { get; set; }/// <summary>/// 录入设备IP/// </summary>public string ip { get; set; }/// <summary>/// 录入设备号/// </summary>public string sn { get; set; }public override string ToString(){return ip + ":" + sn + "(" + machineAlias + ")";}}
 /// <summary>/// 考勤机用户(信息)/// </summary>public class ZKTimeUserMsg{public ZKTimeUserMsg(string userId, string name){this.Id = userId;this.Name = name;this.time_machines = new SortedDictionary<DateTime, ZKTimeMachineMsg>();}/// <summary>/// 姓名/// </summary>public string Name { get; set; }/// <summary>/// id/// </summary>public string Id { get; set; }/// <summary>/// 部门名/// </summary>public string DeptName { get; set; }/// <summary>/// 考勤打卡记录(主键)【打卡日期时间-考勤机器】/// </summary>public SortedDictionary<DateTime, ZKTimeMachineMsg> time_machines { get; set; }public override string ToString(){return Name + "(" + time_machines.Count + ")";}}

3.工具类

     /// <summary>/// 线程锁/// </summary>private readonly static object obj = new object();/// <summary>/// 中控指定mdb文件名/// </summary>private const string activityMdb = "activity.mdb";/// <summary>/// 考勤机连接失败标志/// </summary>private const string connectFailSign = "Connect Result:Fail";/// <summary>/// 中控软件考勤机连接情况截图横轴大小/// </summary>private const int ZKTShotcutSizeX = 1330;/// <summary>/// 中控软件考勤机连接情况截图纵轴大小/// </summary>private const int ZKTShotcutSizeY = 185;/// <summary>/// 蓝色/// </summary>private readonly static Color blue = Color.FromArgb(0, 0, 255);/// <summary>/// 考勤数据库文件密码/// </summary>private readonly static string ZKTimeMdbPassWord = @SettingHelper.GetString("ZKTimeMdbPassWord");/// <summary>/// 考勤查询目标配置文件(一行一个人名)/// </summary>public readonly static string ZKTimeMdbTargets = @SettingHelper.GetString("ZKTimeMdbTargets");/// <summary>/// 早班分割时点(例如此值为4,则凌晨4点前的考勤归前一天)/// </summary>public static readonly int ZKTimeDivisionMorningHour = int.Parse(@SettingHelper.GetString("ZKTimeDivisionMorningHour"));/// <summary>/// 午班班分割时点(例如此值为14,则下午两点(14点)前的考勤早班打卡)/// </summary>public static readonly int ZKTimeDivisionAfternoonHour = int.Parse(@SettingHelper.GetString("ZKTimeDivisionAfternoonHour"));/// <summary>/// 中控软件的安装目录/// </summary>public static readonly string ZKTecoPath = @SettingHelper.GetString("ZKTecoPath");/// <summary>/// 中控软件考勤机连接情况保留日数/// </summary>public static readonly int ZKTLogsKeepDays = int.Parse(@SettingHelper.GetString("ZKTLogsKeepDays"));/// <summary>/// 中控软件考勤机连接情况截图目录/// </summary>public static readonly string ZKTshotcutPath = Path.Combine(Environment.CurrentDirectory, "ZKTshotcut");/// <summary>/// 用户考勤信息缓存/// </summary>private readonly static List<ZKTimeUserMsg> zkTimeUsers = new List<ZKTimeUserMsg>();/// <summary>/// 是否暂停数据收集/// </summary>public static bool isCollectingFromMachine = false;/// <summary>/// 是否只上传/// </summary>public static bool isOnlyUpload = false;/// <summary>/// 获取MDB表格信息/// </summary>/// <param name="tableName"></param>/// <param name="fields"></param>/// <param name="conditionString"></param>/// <returns></returns>public static DataTable GetMDBMsg(string sqlString, string dataSourcePath){DataTable dataTable = new DataTable();//string connString =//    @"Provider=Microsoft.Jet.OLEDB.4.0;" +//    "Data Source=" + dataSourcePath + ";" +//    "Jet OLEDB:Database Password=" + ZKTimeMdbPassWord;// oleDbConnectionStringBuilder.Keys://File Name//Provider//Data Source//Persist Security Info//OLE DB Services//Cache Authentication//Encrypt Password//Mask Password//Password//User ID//Mode//Extended Properties//Locale Identifier//Jet OLEDB:System database//Jet OLEDB:Registry Path//Jet OLEDB:Database Password//Jet OLEDB:Engine Type//Jet OLEDB:Database Locking Mode//Jet OLEDB:Global Partial Bulk Ops//Jet OLEDB:Global Bulk Transactions//Jet OLEDB:New Database Password//Jet OLEDB:Create System Database//Jet OLEDB:Encrypt Database//Jet OLEDB:Don't Copy Locale on Compact//Jet OLEDB:Compact Without Replica Repair//Jet OLEDB:SFP//Jet OLEDB:Compact Reclaimed Space AmountOleDbConnectionStringBuilder oleDbConnectionStringBuilder = new OleDbConnectionStringBuilder{Provider = "Microsoft.Jet.OLEDB.4.0",DataSource = dataSourcePath,};oleDbConnectionStringBuilder["Jet OLEDB:Database Password"] = ZKTimeMdbPassWord;using (OleDbConnection oleDbConnection = new OleDbConnection(oleDbConnectionStringBuilder.ConnectionString)) //1、建立连接 {oleDbConnection.Open();//2、打开连接 using (OleDbCommand oleDbCommand = oleDbConnection.CreateCommand())//建立SQL查询{oleDbCommand.CommandText = sqlString;LogHelper.logger.Info(oleDbCommand.CommandText);using (OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader())//建立读取   {//查询并显示数据   int size = oleDbDataReader.FieldCount;for (int i = 0; i < size; i++){DataColumn dataColumn;dataColumn = new DataColumn(oleDbDataReader.GetName(i));dataTable.Columns.Add(dataColumn);}while (oleDbDataReader.Read()){DataRow dataRow = dataTable.NewRow();for (int i = 0; i < size; i++){string str = oleDbDataReader.GetName(i);dataRow[str] = oleDbDataReader[str].ToString();}dataTable.Rows.Add(dataRow);}}}}return dataTable;}/// <summary>/// 获取中控考勤数据/// </summary>public static bool GetZKTimeCheckoutData(){zkTimeUsers.Clear();// 清空原数据string targetNames = "";try{foreach (string ZKTimeMdbTarget in File.ReadAllLines(ZKTimeMdbTargets))if (!string.IsNullOrWhiteSpace(ZKTimeMdbTarget))targetNames += "'" + ZKTimeMdbTarget + "',";string sqlString ="select " +"   USERINFO.USERID," +// 0.用户id"   USERINFO.NAME," +// 1.姓名"   CHECKINOUT.CHECKTIME," +// 2.录入时间"   CHECKINOUT.SN," +// 3.录入设备号"   MACHINES.MACHINEALIAS," +// 4.录入设备名称"   MACHINES.IP " +// 5.录入设备IP//"   DEPARTMENTS.DEPTNAME," +// 6.部门名称"from " +//"   (" +"(CHECKINOUT " +// 签到表"   left join USERINFO on USERINFO.USERID = CHECKINOUT.USERID )" +// 关联用户表//"   left join DEPARTMENTS on DEPARTMENTS.DEPTID = USERINFO.DEFAULTDEPTID ) " +// 关联部门表"   left join MACHINES on MACHINES.SN = CHECKINOUT.SN " + // 设备表"where " +"   1 = 1 " +"   and " +"   USERINFO.NAME IN ( " + targetNames.TrimEnd(',') + " )" +// 查询目标"   and " +"   MACHINES.MACHINEALIAS NOT LIKE ( '%门禁%' )" +// 排除门禁"   and " +"   CHECKINOUT.CHECKTIME BETWEEN DATE()-14 AND NOW() " +// 限定上周一到周日数据"";string mdbDirectoty = Path.Combine(ZKTecoPath, "mdbs");FileInfo[] fileInfos = new DirectoryInfo(mdbDirectoty).GetFiles("*.mdb");foreach (FileInfo fileInfo in fileInfos)if (fileInfo.Exists)foreach (DataRow dataRow in GetMDBMsg(sqlString, fileInfo.FullName).Rows){// *号为非录入字段string userId = dataRow[0].ToString();// 0.用户id *string name = dataRow[1].ToString();// 1.姓名string checkTime = dataRow[2].ToString();// 2.录入时间string sn = dataRow[3].ToString();// 3.录入设备号string machineAlias = dataRow[4].ToString();// 4.录入设备名称 *string ip = dataRow[5].ToString();// 5.录入设备IP *//string deptName = dataRow[6].ToString();// 6.部门名称if (!zkTimeUsers.Any((user) => { return user.Name == name; }))zkTimeUsers.Add(new ZKTimeUserMsg(userId, name));ZKTimeUserMsg zkTimeUser = zkTimeUsers.First((user) => { return user.Name == name; });if (!string.IsNullOrWhiteSpace(checkTime))zkTimeUser.time_machines.Add(Convert.ToDateTime(checkTime), new ZKTimeMachineMsg(machineAlias, ip, sn));}elsethrow new Exception("考勤数据库文件【" + fileInfo.FullName + "】不存在!");LogHelper.logger.Info("获取考勤信息成功!");}catch (Exception ex){LogHelper.logger.Error("获取考勤信息异常!", ex);return false;}return true;}/// <summary>/// 判断是否上班/下班没打卡/// </summary>/// <param name="isSaturday">是否在周六</param>/// <param name="startHour">最早打卡点的小时数</param>/// <param name="endHour">最晚打卡点的小时数</param>/// <param name="isLackStart">是否上班没打卡</param>/// <param name="isLackEnd">是否下班没打卡</param>private static void IsLack(bool isSaturday, int startHour, int endHour, ref bool isLackStart, ref bool isLackEnd){isLackStart = false;isLackEnd = false;// 最早打卡点if ((isSaturday && startHour > 12)// 周六12点前不打=上班没打卡|| // 非周六4-14点间不打=上班没打卡(!isSaturday && (startHour < ZKTimeDivisionMorningHour || startHour >= ZKTimeDivisionAfternoonHour)))isLackStart = true;// 最晚打卡点if ((isSaturday && endHour < 12 && endHour > 4)// 周六12点之后不打=下班没打卡||// 非周六在上班打卡时段打卡=下班没打卡(!isSaturday && endHour >= ZKTimeDivisionMorningHour && endHour < ZKTimeDivisionAfternoonHour))isLackEnd = true;}/// <summary>/// 收集考勤机数据/// </summary>public static bool GetZKTimeDatas(){if (isOnlyUpload)return true;string logsDirectoty = Path.Combine(ZKTecoPath, "Logs");string mdbDirectoty = Path.Combine(ZKTecoPath, "mdbs");string activityPath = Path.Combine(mdbDirectoty, "activity", activityMdb);try{LogHelper.logger.Info("正在获取中控数据库集...");FileInfo[] fileInfos = new DirectoryInfo(mdbDirectoty).GetFiles("*.mdb");LogHelper.logger.Info("获取【" + mdbDirectoty + "】目录下的中控数据库集成功!");Array.Reverse(fileInfos);Process process = new Process();process.StartInfo.FileName = Path.Combine(ZKTecoPath, "Att.exe");process.StartInfo.UseShellExecute = false;process.StartInfo.RedirectStandardInput = false;process.StartInfo.RedirectStandardOutput = false;process.StartInfo.RedirectStandardError = false;process.StartInfo.CreateNoWindow = true; //不弹出窗口,改为后台运行ShutDownAtt(process);DateTime startTime = DateTime.Now;foreach (FileInfo fileInfo in fileInfos){LogHelper.logger.Info("正在复制中控数据库【" + fileInfo.Name + "】到活动数据库【" + activityMdb + "】...");File.Copy(fileInfo.FullName, activityPath, true);LogHelper.logger.Info("复制中控数据库【" + fileInfo.Name + "】到活动数据库【" + activityMdb + "】成功!准备打开指向【" + fileInfo.Name + "】的中控软件...");process.Start();// 打开中控软件LogHelper.logger.Info("打开指向【" + fileInfo.Name + "】的中控软件成功,等待中控软件自动获取考勤数据!");Thread.Sleep(5 * 60 * 1000);// 等待中控自动下载#region 这里是想用程序句柄获取运行截屏,但虚拟机不支持//LogHelper.logger.Info("正在检查【" + fileInfo.Name + "】的各个考勤机连接情况!");//IntPtr intPtr = SystemHelper.GetWnd(process.Id, "TListView", "with ad");//SystemHelper.GetWindowCapture(intPtr).Save(Path.Combine(ZKTshotcutPath, Path.GetFileNameWithoutExtension(fileInfo.Name) + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg"));//Thread.Sleep(1000);//intPtr = SystemHelper.GetWnd(process.Id, "TListView", "考勤管理程序");//SystemHelper.GetWindowCapture(intPtr).Save(Path.Combine(ZKTshotcutPath, Path.GetFileNameWithoutExtension(fileInfo.Name) + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg"));//Thread.Sleep(1000);//intPtr = SystemHelper.GetWnd(process.Id, "TListView", "考勤管理程序 - [ - 2022/1/14]");//SystemHelper.GetWindowCapture(intPtr).Save(Path.Combine(ZKTshotcutPath, Path.GetFileNameWithoutExtension(fileInfo.Name) + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg"));//SystemHelper.GetWindowCaptureByName("考勤管理程序 - [ - 2022/1/14]", "TFormAttMain").Save(Path.Combine(ZKTshotcutPath, Path.GetFileNameWithoutExtension(fileInfo.Name) + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg"));//SystemHelper.GetWindowCapture(process.MainWindowHandle).Save(Path.Combine(ZKTshotcutPath, Path.GetFileNameWithoutExtension(fileInfo.Name) + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg"));#endregion#region 这里想用截屏方式获取连接情况,不过虚拟机不支持//if (!Directory.Exists(ZKTshotcutPath))//    Directory.CreateDirectory(ZKTshotcutPath);//List<bool> isLinkings = new List<bool>();// 自上而下的连接情况-是否已连接//using (Bitmap bitmap = new Bitmap(ZKTShotcutSizeX, ZKTShotcutSizeY))// 画布大小//using (Graphics graphics = Graphics.FromImage(bitmap))//{//    graphics.CopyFromScreen(new Point(249, 88), new Point(0, 0), new Size(ZKTShotcutSizeX, ZKTShotcutSizeY));// 截图开始坐标,截图范围内的开始坐标,截图范围//    // 检索【未连接】字符//    for (int i = 0; i < ZKTShotcutSizeX - 11; i++)//        for (int j = 0; j < ZKTShotcutSizeY - 11; j++)//            if (IsUnlink(bitmap, i, j))//                isLinkings.Add(false);//            else if (Islinked(bitmap, i, j)) //                isLinkings.Add(true);//    if (isLinkings.Any((isLinking) => { return !isLinking; }))// 如有未连接状态的考勤机//        bitmap.Save(Path.Combine(ZKTshotcutPath, Path.GetFileNameWithoutExtension(fileInfo.Name) + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg"));// 保存截图//}#endregionThread.Sleep(1 * 60 * 1000);// 等待中控自动下载LogHelper.logger.Info("正在关闭指向【" + fileInfo.Name + "】的中控软件...");ShutDownAtt(process);Thread.Sleep(10 * 1000);// 等待内存资源释放LogHelper.logger.Info("已关闭指向【" + fileInfo.Name + "】的中控软件,正在更新考勤数据到【" + fileInfo.Name + "】...");File.Copy(activityPath, fileInfo.FullName, true);// 将更新数据覆盖原数据LogHelper.logger.Info("更新考勤数据到【" + fileInfo.Name + "】成功!");Thread.Sleep(10 * 1000);// 等待内存资源释放}LogHelper.logger.Info("从考勤机下载考勤数据到【" + mdbDirectoty + "】成功!");//foreach (FileInfo fileInfo in new DirectoryInfo(ZKTshotcutPath).GetFiles("*.jpg"))//删除N个月前的考勤机连接情况记录//    if (fileInfo.CreationTime.AddMonths(ZKTShotcutKeepDays).Ticks <= DateTime.Now.Ticks)//        fileInfo.Delete(); List<string> connectFailMachineNames = new List<string>();foreach (FileInfo fileInfo in new DirectoryInfo(logsDirectoty).GetFiles("*.txt"))//删除N个月前的考勤机连接情况记录if (fileInfo.CreationTime.AddMonths(ZKTLogsKeepDays).Ticks <= DateTime.Now.Ticks)fileInfo.Delete();else if (fileInfo.CreationTime.Ticks > startTime.Ticks)foreach (string log in File.ReadAllLines(fileInfo.FullName))if (log.Contains(connectFailSign)){string machineName = fileInfo.Name.Split('_')[0];if (connectFailMachineNames.Contains(machineName))break;connectFailMachineNames.Add(machineName);LogHelper.logger.Warn("考勤机【" + machineName + "】连接失败...");break;}}catch (Exception ex){LogHelper.logger.Error("从考勤机下载考勤数据到【" + mdbDirectoty + "】时发生异常...", ex);return false;}return true;}/// <summary>/// 是否已连接/// </summary>/// <param name="bitmap"></param>/// <param name="i"></param>/// <param name="j"></param>/// <returns></returns>private static bool Islinked(Bitmap bitmap, int i, int j){int ii = i;int jj = j;#region 已if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;for (int k = 0; k < 7; k++)if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;#endregion#region 连if (true&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj)&& blue != bitmap.GetPixel(ii, jj++))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;#endregion#region 接if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj)){//jj = j;return true;}elsereturn false;#endregion}/// <summary>/// 是否未连接/// </summary>/// <param name="bitmap"></param>/// <param name="i"></param>/// <param name="j"></param>/// <returns></returns>private static bool IsUnlink(Bitmap bitmap, int i, int j){int ii = i;int jj = j;#region 未if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;#endregion#region 连if (true&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj)&& blue != bitmap.GetPixel(ii, jj++))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;#endregion#region 接if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue == bitmap.GetPixel(ii++, jj))jj = j;elsereturn false;if (true&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii, jj++)&& blue != bitmap.GetPixel(ii++, jj)){//jj = j;return true;}elsereturn false;#endregion}/// <summary>/// 关闭中控程序/// </summary>/// <param name="process">待关闭程序</param>private static void ShutDownAtt(Process process){try{Process[] ps = Process.GetProcessesByName("Att");process.Close();// 释放资源foreach (Process p in ps)if (!p.HasExited) //当没有退出时,立即停止关联的进程p.Kill();}catch (InvalidOperationException){LogHelper.logger.Info("考勤程序已关闭!");}}

PS.winform使用 【CopyFromScreen (0x80004005): 句柄无效】的异常问题,暂时没找到好办法,所以中间想靠截图未连接的考勤机就当玩闹吧~

4.调用

     /// <summary>/// 获取中控考勤数据/// </summary>public static void SynZKTimeCheckoutData(){lock (obj){if (isCollectingFromMachine)return;isCollectingFromMachine = true;}if (GetZKTimeDatas() && GetZKTimeCheckoutData())上传到其他平台();isCollectingFromMachine = false;return;}

5.运行效果

3.结语

最后欢迎各位看客在评论区指点一二~

C#收集中控ZKTeco考勤数据相关推荐

  1. zkteco iface702 中控考勤机java开发步骤二---获取考勤机 的考勤数据

    1.工具类---ZkemSDKUtils package com.XXX.gasstation.commons.utils;import com.jacob.activeX.ActiveXCompon ...

  2. 中控考勤与海威达C6考勤系统考勤数据同步

    公司的老考勤机坏了,换成中控的S30考勤机了,考勤数据需要合并在一起,特写此存储过程,加入到每天的作业中让其自动执行.考勤统计仍然使用C6的,所以将考勤数据同步到C6的考勤里面. ---------- ...

  3. 小飞鱼通达OA二次开发 同步中控考勤机网络版数据到OA系统并增加个人查询功能(图文)

    一般我们同步的都是中控的单机版系统,这个系统本身是支持的,只不过原有的程序有些bug需要处理一下.这次同步的是中控的网络版考勤机,有什么不同么?当然有,网络版的数据库结构与单机版本完全不同. 经过连接 ...

  4. 多条记录取最近日期的一条_Excel VBA:基于员工打卡记录的考勤数据统计

    微信公众号:金融数学 使用VBA做一个基于员工打卡记录的考勤数据分析工具; 1应用场景 某公司通过门禁系统记录了每位员工上下班打卡时间,现在需要对一段特定时间内员工出勤情况进行统计分析,包含加班时间( ...

  5. ELK根据服务类型收集多个容器数据

    转载来源 :ELK根据服务类型收集多个容器数据 : https://www.jianshu.com/p/29ad69776ae5 1.安装docker-compose yum install -y p ...

  6. 从钉钉后台获取考勤数据(其他数据获取类似)

    从钉钉后台获取考勤数据等 下载钉钉的SDK包 从开发者后台获取AppKey和AppSecret 上代码: # -*- coding: utf-8 -*- import requests, loggin ...

  7. python数据收集整理教案_数据收集整理教学设计

    数据收集整理教学设计 在教学工作者实际的教学活动中,可能需要进行教学设计编写工作,借助教学设计可以更大幅度地提高学生各方面的能力,从而使学生获得良好的发展.那么什么样的教学设计才是好的呢?下面是小编整 ...

  8. 【钉钉-场景化能力包】制造业考勤数据多维分析

    客户痛点 考勤在企业中往往是非常重要的一个管理依据,企业通过结合钉钉考勤的相关能力,可以随时获取到员工考勤打卡生成的数据,但是钉钉考勤仅提供了简单的考勤数据查询统计功能,不能真正做到考勤数据的多维分析 ...

  9. VBA实现企业微信API获取考勤数据,解析JSON数据格式。

    '通过微信API接口发送和获取数据 Function weixinAPI(starttime As String, endtime As String) As StringDim access_tok ...

  10. java调用企业微信接口---获取考勤数据

    Static和new的区别? static : 不需要创建实例可直接使用, 会直到程序关闭才会释放资源,类的一个成员被static修饰后,该成员就属于类的成员了,被所有对象共享. new 对象: 每次 ...

最新文章

  1. gcc/g++ 编译器出现 undefined reference to ‘这里是函数名‘,往往意味这这个函数没有定义
  2. Struts Web应用程序开发步骤
  3. Codeigniter 3 拓展HMVC
  4. 不成为编程天才的5种贡献方式
  5. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十八:SDRAM模块① — 单字读写...
  6. jquery批量删除
  7. jQuery 实现Ajax
  8. dao层和service层和control_最受欢迎Java数据库访问框架(DAO层)
  9. 数组的最长递减子序列java_求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}...
  10. Java-万元与元之间的换算
  11. 【PX4自动驾驶用户指南】距离传感器
  12. linux权限管理的设计,Linux权限管理漫谈之用户切换
  13. 阿里天池竞赛项目——二手车交易价格预测
  14. GooglePlay应用上架流程
  15. 重磅直播丨迈向移动数字金融 —— 神州信息并购云核网络线上发布会
  16. 《TCP/IP详解》读书笔记(18章)-TCP连接的建立与中止
  17. linux编辑文本到最后一行,linux编辑文本(vim)时跳转到最后一行和第一行及相关指令...
  18. 前端性能自动化执行机服务开发
  19. HTML+CSS制作二级菜单栏
  20. linux使用MAT分析dump文件

热门文章

  1. 液压控制系统的simulink搭建
  2. 怎么把word目录里面的“目录”两个字去掉
  3. DSD解码ES9038PRO和AK4497
  4. C语言:鸡兔同笼问题(基础代码)
  5. cad补全三视图_机械制图课程中补全三视图的解题方法
  6. 实用分享-MAC修改器(摆脱网络封锁的困扰)
  7. 深入理解linux网络pdf,深入理解Linux网络技术内幕 pdf epub mobi txt 下载
  8. 永洪bi logo更换
  9. oracle IMP命令导入导出DMP文件
  10. Java单例模式(饿汉式)