ZKTeco 中控考勤机M300 plus java开发步骤 使用jacob 调用中控考勤机dll(详细配置)
ZKTeco 中控考勤机M300 plus java开发步骤 使用jacob 调用中控考勤机dll(详细配置)
- 开发前的准备工作
- 进行java代码测试
- 以下为一些用到的操作方法
- 这也只是一部分的操作方法,官方文档中提供了很多的开发接口方案,具体用到还要具体的研究
我们公司最近在做中控智慧的一个考勤机的系统,主要目的是通过我们的系统对考勤机的一些操作,以及获取到考勤机的数据。有一些开发的经验分享出来,以下是通过java使用jacob调用中控考勤机sdk方法。
开发前的准备工作
1、jacob-1.19版本
注意使用的本机jdk版本号为1.8以上必须使用jacob-1.19,其他版本不适合高版本jdk,下载链接:https://sourceforge.net/projects/jacob-project/
2、jdk1.8 64位(注意使用的jdk和jacob的操作位数要相同,负责会报错);
3、普通导入jar包方案:将jacob.jar 放入项目 WEB-INFO/lib下导入:
我是使用的是maven管理的,所以我直接导入pom文件:
<dependency><groupId>com.jacob</groupId><artifactId>jacob</artifactId><version>1.19</version>
</dependency>
此处的导入jar文件应该会报错,所以我直接将jacob-1.19.jar放在所对应的目录位置。可能版本号会爆红,但不影响使用。
4、将jacob-1.19-x64.dll 放入 jdk/bin目录下以及jdk/jre/bin,我的是:D:\Java\jdk1.8\bin;D:\Java\jdk1.8\jre\bin;
另外我为了以防万一,也将c:\windows\syswow64;C:\Windows\System32 目录下存放一份。
5、将中控考勤机官方提供的sdk 的dll文件全部放入 c:\windows\syswow64 目录下(我的是64位系统,32位的话没测试,放入system32目录下);
中控官网的sdk下载链接:https://www.zkteco.com/cn/download_catgory/45.html
6、这里很重要一定要,一定要管理员身份运行cmd
注册zkemkeeper.dll —>
regsvr32 c:\windows\syswow64\zkemkeeper.dll
只有注册成功才可以连接到考勤机
7、成功后如下提示:
进行java代码测试
然后进行连接测试,我使用的是内网,需要将考勤机的局域网考勤方式打开。
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 中控考勤机sdk函数调用类* @author zhangwei**/
public class ZkemSDK {//zkemkeeper.ZKEM.1private static ActiveXComponent zkem = new ActiveXComponent("zkemkeeper.ZKEM.1");/*** 链接考勤机* @param address 考勤机地址* @param port 端口号* @return*/public boolean connect(String address,int port){boolean result = zkem.invoke("Connect_NET",address,port).getBoolean();return result;}/*** 断开考勤机链接*/public void disConnect(){zkem.invoke("Disconnect");}
}
/*** 考勤机链接测试* @author wangchao**/
public class Main {public static void main(String[] args) {ZkemSDK sdk = new ZkemSDK();boolean connFlag = sdk.connect("192.168.1.100", 4370);System.out.println("conn:"+connFlag);//输出位true即为连接成功,否则请检查网络问题}
}
以下为一些用到的操作方法
/*** 获取用户信息* @param number 考勤号码* @return*/public Map<String,Object> getUserInfoByNumber(String number){Variant v0 = new Variant(1);Variant sdwEnrollNumber = new Variant(number,true);Variant sName = new Variant("",true);Variant sPassword = new Variant("",true);Variant iPrivilege = new Variant(0,true);Variant bEnabled = new Variant(false,true);boolean result = zkem.invoke("SSR_GetUserInfo",v0 ,sdwEnrollNumber,sName,sPassword,iPrivilege,bEnabled).getBoolean();if(result){Map<String,Object> m = new HashMap<String, Object>();m.put("EnrollNumber", number);m.put("Name", sName.getStringRef());m.put("Password", sPassword.getStringRef());m.put("Privilege", iPrivilege.getIntRef());m.put("Enabled", bEnabled.getBooleanRef());return m;}return null;}/*** 设置用户信息* @param number* @param name* @param password* @param isPrivilege* @param enabled* @return*/public boolean setUserInfo(String number,String name,String password, int isPrivilege,boolean enabled){//机器号Variant v0 = new Variant(1);//用户号Variant sdwEnrollNumber = new Variant(number,true);//用户姓名Variant sName = new Variant(name,true);//用户密码Variant sPassword = new Variant(password,true);//用户权限Variant iPrivilege = new Variant(isPrivilege,true);//用户启用标志Variant bEnabled = new Variant(enabled,true);boolean result = zkem.invoke("SSR_SetUserInfo",v0 ,sdwEnrollNumber,sName,sPassword,iPrivilege,bEnabled).getBoolean();return result;}/*** 设置卡号* @param cardNo*/public boolean setCardNumber(String cardNo){//卡号Variant cardnumber = new Variant(cardNo,true);//先设置卡号信息boolean setStrCardNumber = zkem.invoke("SetStrCardNumber", cardnumber).getBoolean();//System.out.println("setStrCardNumber:"+setStrCardNumber);return setStrCardNumber;}/*** 删除考勤机对应用户* @param number 工号* @return*/public boolean deleteUserInfoByNumber(String number){//机器号Variant v0 = new Variant(1);//工号Variant cardnumber = new Variant(number,true);//指纹索引Variant backupNumber = new Variant(12,true);boolean deleteEnrollDataExt = zkem.invoke("SSR_DeleteEnrollDataExt",v0, cardnumber,backupNumber).getBoolean();
// System.out.println("deleteEnrollDataExt:"+deleteEnrollDataExt);return deleteEnrollDataExt;}/*** 读取考勤记录到pc缓存。配合getGeneralLogData使用** @return*/public boolean readGeneralLogData() {boolean result = zkem.invoke("ReadGeneralLogData", 1).getBoolean();return result;}/*** 获取缓存中的考勤数据。配合readGeneralLogData / readLastestLogData使用。** @return 返回的map中,包含以下键值:* "EnrollNumber" 人员编号* "Time" 考勤时间串,格式: yyyy-MM-dd HH:mm:ss* "VerifyMode"* "InOutMode"* "Year" 考勤时间:年* "Month" 考勤时间:月* "Day" 考勤时间:日* "Hour" 考勤时间:时* "Minute" 考勤时间:分* "Second" 考勤时间:秒*/public List<Map<String, Object>> getGeneralLogData() {//以下代码是读取所有考勤数据的代码Variant v0 = new Variant(1);Variant dwEnrollNumber = new Variant("",true);Variant dwVerifyMode = new Variant(0,true);Variant dwInOutMode = new Variant(0,true);Variant dwYear = new Variant(0,true);Variant dwMonth = new Variant(0,true);Variant dwDay = new Variant(0,true);Variant dwHour = new Variant(0,true);Variant dwMinute = new Variant(0,true);Variant dwSecond = new Variant(0,true);Variant dwWorkCode = new Variant(0,true);List<Map<String,Object>> strList = new ArrayList<Map<String,Object>>();boolean newresult = false;do{Variant vResult = Dispatch.call(zkem, "SSR_GetGeneralLogData", v0,dwEnrollNumber,dwVerifyMode,dwInOutMode,dwYear,dwMonth,dwDay,dwHour,dwMinute,dwSecond,dwWorkCode);newresult = vResult.getBoolean();if(newresult){String enrollNumber = dwEnrollNumber.getStringRef();//如果没有编号,则跳过。if(enrollNumber == null || enrollNumber.trim().length() == 0)continue;Map<String,Object> m = new HashMap<String, Object>();m.put("EnrollNumber", enrollNumber);m.put("Time", dwYear.getIntRef() + "-" + dwMonth.getIntRef() + "-" + dwDay.getIntRef() + " " + dwHour.getIntRef() + ":" + dwMinute.getIntRef() + ":" + dwSecond.getIntRef());m.put("VerifyMode", dwVerifyMode.getIntRef());m.put("InOutMode", dwInOutMode.getIntRef());
// m.put("Year", dwYear.getIntRef());
// m.put("Month", dwMonth.getIntRef());
// m.put("Day", dwDay.getIntRef());
// m.put("Hour", dwHour.getIntRef());
// m.put("Minute", dwMinute.getIntRef());
// m.put("Second", dwSecond.getIntRef());strList.add(m);}}while(newresult == true);return strList;}/*** 删除某个日期之前的考勤记录* @param date* @return*/public boolean deleteAttendanceByDate(String date){//机器号Variant v0 = new Variant(1);//时间Variant dateTime = new Variant(date,true);boolean deleteAttlogByTime = zkem.invoke("DeleteAttlogByTime", v0, dateTime).getBoolean();System.out.println("deleteAttlogByTime:"+deleteAttlogByTime);return deleteAttlogByTime;}
这也只是一部分的操作方法,官方文档中提供了很多的开发接口方案,具体用到还要具体的研究
ZKTeco 中控考勤机M300 plus java开发步骤 使用jacob 调用中控考勤机dll(详细配置)相关推荐
- zkteco iface702 中控考勤机java开发步骤一---连接考勤机
送您一个最高1888元的阿里云大礼包,快来领取吧~ java使用jacob调用中控考勤机sdk方法 1.jacob-1.19版本 2.jdk1.8 64位(经过测试jacob.1.19支持64为jdk ...
- Thrift实现C#调用Java开发步骤详解
概述 Thrift实现C#调用Java开发步骤详解 详细 代码下载:http://www.demodashi.com/demo/10946.html Apache Thrift 是 Facebook ...
- java 使用jacob 调用中控考勤机dll(详细配置)
根据网上内容搜索以及不断尝试,总结出以下java使用jacob调用中控考勤机sdk方法 1.jacob-1.18版本 2.jdk1.732位(经过测试jacob目前只支持32位jdk,64位下报错): ...
- 校园二手书商城源代码基于微信小程序云开发,可在线支付提现,含详细配置教程
校园二手书商城源代码基于微信小程序云开发,可在线支付提现,含详细配置教程 完整代码下载地址:校园二手书商城源代码基于微信小程序云开发 欢迎使用,下面是配置教程 长话短说,下面直接说配置流程 一.小程序 ...
- java开发可重用代码包工具包_[Java教程]彻底搞懂Java开发工具包(JDK)安装及环境变量配置...
[Java教程]彻底搞懂Java开发工具包(JDK)安装及环境变量配置 0 2021-01-04 04:00:04 安装并配置JDK环境变量,不但要知道怎样做,也要知道为什么这样做,知其然知其所以然. ...
- 此安装程序必须使用 java 开发工具包 (jdk) 执行_彻底搞懂Java开发工具包(JDK)安装及环境变量配置...
[官方正版]java jdk 9学习笔记 78.4元 包邮 (需用券) 去购买 > 一.Java 和 JDK 是什么 Java:Java是一种优秀的程序设计语言,它有非常多的语言特性,如简单性. ...
- java项目中没有jdk包_彻底搞懂Java开发工具包(JDK)安装及环境变量配置
一.Java 和 JDK 是什么 Java:Java是一种优秀的程序设计语言,它有非常多的语言特性,如简单性.面向对象.可移植性等.Java 并不只是一种语言,而是一个完整的平台,它有一个庞大的库,其 ...
- Java开发陪玩系统源码小程序app详细介绍
Java开发的陪玩系统源码小程序app以下是它的功能介绍: 一.用户端: 1. 用户注册与登录:用户可以使用手机号或微信登录进行注册. 2. 服务列表:用户可以浏览选择陪玩师提供的服务类型和价格,包括 ...
- JAVA在IDEA中用JNA调用C++的dll动态链接库案例
目录 引言 准备工作 1.JNA包 2.DLL文件 接口准备 接口参数说明 1.DLL路径 [报错]找不到文件 如何查看DLL文件的位数? 2.函数声明 如何查看DLL文件中有哪些函数? C++与JA ...
- Java基于VB通过Jacob调用AutoCAD接口
Java 以跨平台深受大家喜欢,而由于它跨平台的目的,需要运行在java虚拟机上工作,使得它和本地机器各种内部联系变得很少,约束了它直接掉本地API的功能.本例采用VB代码生成调用AutoCAD接口的 ...
最新文章
- python推荐系统-RecQ-Python推荐系统框架
- java if语句选择题_选择语句(if else) 习题(2017/12/1)
- 华师大数据科学考研_2020年30所微电子院校考研信息详细汇总
- OC-NSArray
- wiki的watch设置
- 1、play编程基础
- LeetCode 1200. 最小绝对差
- 【今日CV 计算机视觉论文速览 第116期】Mon, 13 May 2019
- Go语言标准库之fmt.Print
- Office Word2019您正试图运行的函数包含有宏或需要宏语言
- hash通信(python多线程应用)采用md5加密
- eggjs 项目实践
- WebService的知识总结(一)
- 如何利用各大博客引流
- Typora怎么将文本居中
- linux获取笔记本摄像头视频,Linux下利用Opencv打开笔记本摄像头问题
- Elasticsearch:在华为大数据集群 从c80升级至651版本后,执行es命令修改配置失败
- 定值保险计算举例_保险中生命表的计算例题 定值保险和不定值保险计算例题...
- 计算机学硕考公更好还是专硕,专硕 VS 学硕 你适合读哪种?
- 飞书文档如何添加代码块 ```
热门文章
- viper12a电源电路图_viper12a引脚功能图与引脚电压
- typecho编辑器 图片修改宽度高度 并且设置居中
- 联合分布,边缘分布,条件分布,互信息
- 夏普电视出现android不动了,夏普电视常见故障问题分析与处理,电视机故障判断检修...
- 计算机管理及维护培训考试题,计算机考试题库和答案_浅析高校公共计算机机房管理与维护...
- C语言中的volatile三种作用,volatile关键字在嵌入式C语言中的使用
- innerhtml与outerhtml的区别
- 本地测试微信公众号推送模板
- 阿里矢量图库使用方法
- Google Guice