使用带有 C# 的 SDK 从 ZKTEco 设备获取考勤日志

问题描述 投票:0回答:2

我正在尝试将 ZKTEco U650-C 与我公司的系统集成以自动获取出勤日志,但我无法使用 C# 连接到设备。

我设法从他们的网站下载了 SDK,其中包括 ZKHID、ZKCamera DLL 文件和 SDK 包装器,因此我可以导入和使用它们的功能。

在 Visual Studio 中,我无法引用 ZKHID 和 ZKCamera DLL 文件,因为它们是非托管的。虽然,我能够引用 ZKBioModuleSDKWrapper,因为它使用 PInvoke。

使用TcpClient类连接设备、初始化、终止设备等操作成功。但是,使用其他操作如打开设备,获取设备配置等无法进行,因为我不知道如何获取设备句柄。

我是用错了一套SDK还是别的原因?任何帮助将不胜感激。

dll sdk biometrics zkteco
2个回答
0
投票

原来我用错了一套SDK。 ZKTEco 从他们的官方网站上删除了 SDK 下载链接,所以我不得不从私人服务器下载正确的 SDK。

我在 Visual Studio 中正常添加了 zkemkeeper.dll 引用,对代码进行了一些更改,并且我设法接收了考勤日志。

using zkemkeeper;

namespace ZKTEco_Biometric_Device_Integration
{
    internal class Program
    {
        public Program()
        {
        }

        public enum CONSTANTS
        {
            PORT = 4370,
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Connecting...");
            CZKEM objCZKEM = new CZKEM();
            if (objCZKEM.Connect_Net("192.168.1.11", (int)CONSTANTS.PORT))
            {
                objCZKEM.SetDeviceTime2(objCZKEM.MachineNumber, DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
                Console.WriteLine("Connection Successful!");
                Console.WriteLine("Obtaining attendance data...");
            }
            else
            {
                Console.WriteLine("Connection Failed!");
            }
            if (objCZKEM.ReadGeneralLogData(objCZKEM.MachineNumber))
            {
                //ArrayList logs = new ArrayList();
                string log;
                string dwEnrollNumber;
                int dwVerifyMode;
                int dwInOutMode;
                int dwYear;
                int dwMonth;
                int dwDay;
                int dwHour;
                int dwMinute;
                int dwSecond;
                int dwWorkCode = 1;
                int AWorkCode;
                objCZKEM.GetWorkCode(dwWorkCode, out AWorkCode);
                //objCZKEM.SaveTheDataToFile(objCZKEM.MachineNumber, "attendance.txt", 1);
                while (true)
                {
                    if (!objCZKEM.SSR_GetGeneralLogData(
                    objCZKEM.MachineNumber,
                    out dwEnrollNumber,
                    out dwVerifyMode,
                    out dwInOutMode,
                    out dwYear,
                    out dwMonth,
                    out dwDay,
                    out dwHour,
                    out dwMinute,
                    out dwSecond,
                    ref AWorkCode
                    ))
                    {
                        break;
                    }
                    log = "User ID:" + dwEnrollNumber + " " + verificationMode(dwVerifyMode) + " " + InorOut(dwInOutMode) + " " + dwDay + "/" + dwMonth + "/" + dwYear + " " + time(dwHour) + ":" + time(dwMinute) + ":" + time(dwSecond);
                    Console.WriteLine(log);
                    //logs.Add(log);
                }
            }
            //Console.ReadLine();
        }

        static void getAttendanceLogs(CZKEM objCZKEM)
        {
            string log;
            string dwEnrollNumber;
            int dwVerifyMode;
            int dwInOutMode;
            int dwYear;
            int dwMonth;
            int dwDay;
            int dwHour;
            int dwMinute;
            int dwSecond;
            int dwWorkCode = 1;
            int AWorkCode;
            objCZKEM.GetWorkCode(dwWorkCode, out AWorkCode);
            //objCZKEM.SaveTheDataToFile(objCZKEM.MachineNumber, "attendance.txt", 1);
            while (true)
            {
                if (!objCZKEM.SSR_GetGeneralLogData(
                objCZKEM.MachineNumber,
                out dwEnrollNumber,
                out dwVerifyMode,
                out dwInOutMode,
                out dwYear,
                out dwMonth,
                out dwDay,
                out dwHour,
                out dwMinute,
                out dwSecond,
                ref AWorkCode
                ))
                {
                    break;
                }
                log = "User ID:" + dwEnrollNumber + " " + verificationMode(dwVerifyMode) + " " + InorOut(dwInOutMode) + " " + dwDay + "/" + dwMonth + "/" + dwYear + " " + time(dwHour) + ":" + time(dwMinute) + ":" + time(dwSecond);
                Console.WriteLine(log);
            }
        }

        static string time(int Time)
        {
            string stringTime = "";
            if (Time < 10)
            {
                stringTime = "0" + Time.ToString();
            }
            else
            {
                stringTime = Time.ToString();
            }
            return stringTime;
        }

        static string verificationMode(int verifyMode)
        {
            String mode = "";
            switch (verifyMode)
            {
                case 0:
                    mode = "Password";
                    break;
                case 1:
                    mode = "Fingerprint";
                    break;
                case 2:
                    mode = "Card";
                    break;
            }
            return mode;
        }

        static string InorOut(int InOut)
        {
            string InOrOut = "";
            switch (InOut)
            {
                case 0:
                    InOrOut = "IN";
                    break;
                case 1:
                    InOrOut = "OUT";
                    break;
                case 2:
                    InOrOut = "BREAK-OUT";
                    break;
                case 3:
                    InOrOut = "BREAK-IN";
                    break;
                case 4:
                    InOrOut = "OVERTIME-IN";
                    break;
                case 5:
                    InOrOut = "OVERTIME-OUT";
                    break;

            }
            return InOrOut;
        }
    }
}


-2
投票

@jstuardo 能否分享 SDK 的链接

© www.soinside.com 2019 - 2024. All rights reserved.