关于考勤机
AC671,是新换的机器,以前的那部机器,通过网络死活连接不上,换了AC671网络连接是好用了.但是,我要吐槽
浩顺的考勤机应该是卖了很多了吧,可是自带的软件太不给力,最后分析出来的数据一大堆,并不好用.so,试试看二次开发
联系卖家要来了二次开发包,是一个EXE文件,安装,下一步直到完成.安装后的内容包含例程(VB程序,我没写错,是VB工程,不是VB.NET,为了看代码我又装了一个VB6.0),
DLL和OCX(功能基本一样,都是com组件),PDF(接口说明文档),可执行文件(测试用).
二次开发
看了两遍文档,基本上了解接口的使用,新建工程作下测试.工程就是普通的winform工程,工程建好后添加控件引用,
开始添加dll的引用,死活添加不了,转换成托管代码时也是报错,把能试的方法都用过了,dll的引用也没添加上.
dll的引用不行,还有一个OCX,添加对OCX的引用,具体方法是,在toolbox上添加自定义控件的方式来使用ocx控件
其中,FOWAttend.ocx是用来和考勤机通信的;FKRealSvr.ocx是用来建立考勤机实时监控的.两个OCX在安装后自动注册到系统中(我的是win7 32位中文)
下面两个控件使用后,得到的是你在登记指纹时的登记号,如我的是0000007,没有录名字,但是我们开发的软件不知道这个00000007是谁
所以还要用DB(文件)记录下登记号000007所对应的人的名字,以方便后续的分析
FOWAttend.ocx的使用
新建普通winform工程后,拖一个FOWAttend.ocx的控件到form1上,下面上代码
private void button1_Click(object sender, EventArgs e)
{
// 通过网络连接到考勤机
int machineNo = 1;
string IP = "192.168.1.240"; // 考勤机IP
int port = 5005;
int timeOut = 5000;
int protocolType = 0;
int netPassword = 0;
int license = 1261;
int ret = axFOWAttend1.ConnectNet(machineNo, IP, port, timeOut, protocolType, netPassword, license);
Debug.WriteLine("ret:" + ret); // 返回1,连接正常,其它有错误
}
private void button2_Click(object sender, EventArgs e)
{
// 断开连接
axFOWAttend1.DisConnect();
}
private void button3_Click(object sender, EventArgs e)
{
// 文档上有说明,要读取数据必须用两个方法,LoadGeneralLogData和GetGeneralLogData
int ret = axFOWAttend1.LoadGeneralLogData(0);
int ret2 = 0;
if (ret == 1)
{
int enrollNum = 7;
int verifyMode = 1;
int inOutMode = 1;
while (ret2 != -7) // -7是最后一条时的返回值
{
DateTime dt = DateTime.Now;
// GetGeneralLogData方法参数是ref的,是把考勤信息写到ref变量中,供后面使用,参数意义可参考文档.需要自己循环读取全部考勤记录
ret2 = axFOWAttend1.GetGeneralLogData(ref enrollNum, ref verifyMode, ref inOutMode, ref dt);
Debug.WriteLine(string.Format("ret:{0}, user:{1}, datetime:{2}", ret2, enrollNum, dt.ToString("yyyy-MM-dd HH:mm:ss")));
}
}
}
FKRealSvr.ocx的使用
新建普通winform工程,添加FKRealSvr.ocx到toobox上,并拖一个到form1上,接着上代码
public Form1()
{
InitializeComponent();
axFKRealSvr1.OnReceiveGLogData += new AxFKREALSVRLib._DFKRealSvrEvents_OnReceiveGLogDataEventHandler(axFKRealSvr1_OnReceiveGLogData);
}
private void button1_Click(object sender, EventArgs e)
{
int ret = axFKRealSvr1.OpenNetwork(7005);
Debug.WriteLine("open ret:" + ret);
}
private void button2_Click(object sender, EventArgs e)
{
int ret = axFKRealSvr1.CloseNetwork(7005);
Debug.WriteLine("close ret:" + ret);
}
public void axFKRealSvr1_OnReceiveGLogData(object sender , AxFKREALSVRLib._DFKRealSvrEvents_OnReceiveGLogDataEvent e)
{
// 这里的e还其它值,按需要使用
Debug.WriteLine(string.Format("num: {0}, date: {1}", e.anSEnrollNumber, e.anLogDate.ToString("yyyy-mm-dd HH:mm:ss")));
}
最后使用FKRealSvr.ocx还有一个要注意的地方,否则就不会得到任何数据
要注意的地方是,要在考勤机上作以下三个设置,服务器IP, 服务器端口, 是否同步传输选择是
这样就可以实时的收到打指纹的数据
最后
说明文档的说明写的有点绕口,而且我还没找到通过软件进行打卡的功能,如果找到这个,写个程序,每天在一定时间内自动打卡,呵呵!!!