开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 82|回复: 4
打印 上一主题 下一主题
收起左侧

[易语言] 求助易语言连接sfz读卡器

[复制链接]
结帖率:50% (1/2)
跳转到指定楼层
楼主
发表于 2025-6-20 15:01:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式   河北省石家庄市
100精币
求助易语言连接sfz读卡器:
公司每年给员工发福利,每次都是手动记录sfz号和发放福利的规格,有点麻烦。
我想做一个小软件连接数据库,实现软件连接sfz读卡器,自动识别sfz号并填入对应的文本框或编辑框内。
读卡器型号为:神思SS628(100)X
因为我是新手,没写过几个程序,对于读取和连接DLL文件更是一头雾水
在论坛内只搜索到了寥寥几个帖子,而且我也看不懂
我有读卡器的安装驱动和SDK等全套文件。
哪位大神能不吝指点一二,在下不胜感激!!
如果能帮给个示例代码,更将感恩戴德!!谢谢


补充内容 (2025-6-20 15:03):
连接数据库、登记、发放等界面,我都做好了,就是不会连接sfz读卡器这一步


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:50% (1/2)
沙发
 楼主| 发表于 2025-6-20 15:02:35 | 只看该作者   河北省石家庄市
连接数据库和登记发放界面我已经做好了,就差读sfz信息到文本框这步了
回复

使用道具 举报

结帖率:88% (14/16)
板凳
发表于 2025-6-21 17:29:16 | 只看该作者   广东省东莞市
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
设备句柄整数型  
是否已连接逻辑型  
自动读卡模式逻辑型  
蜂鸣提示逻辑型  
上次读卡时间长整数型  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
初始化界面 ()
检查SDK文件 ()
子程序名返回值类型公开备 注
初始化界面  
标题 = "神思读卡器优化版"
按钮_连接.标题 = "连接设备"
按钮_断开.标题 = "断开连接"
按钮_断开.禁止 = 真
按钮_读卡.禁止 = 真
状态条1.置文本 (0, "就绪")

' 初始化个人信息列表
超级列表框1.插入列 (0, "信息类型", 100)
超级列表框1.插入列 (1, "信息内容", 300)
超级列表框1.显示网格线 = 真

' 设置默认选项
蜂鸣提示 = 真
选择框_蜂鸣提示.选中 = 真
子程序名返回值类型公开备 注
检查SDK文件  
如果真 (文件是否存在 (取运行目录 () + "\SS628 (100)X.dll"))
信息框 ("SDK文件缺失,请将SS628 (100)X.dll放入程序目录", #错误图标, "错误")
结束 ()

子程序名返回值类型公开备 注
_按钮_连接_被单击  
.局部变量 端口号, 整数型
端口号 = 1001  ' USB端口

' 初始化并连接设备
设备句柄 = DLL命令_打开设备 (端口号)

如果 (设备句柄 > 0)
是否已连接 = 真
按钮_连接.禁止 = 真
按钮_断开.禁止 = 假
按钮_读卡.禁止 = 假
状态条1.置文本 (0, "设备连接成功")
时钟_状态监测.时钟周期 = 1000
状态条1.置文本 (0, "连接失败,错误码: " + 到文本 (设备句柄))

子程序名返回值类型公开备 注
_按钮_断开_被单击  
.局部变量 结果, 整数型
结果 = DLL命令_关闭设备 (设备句柄)

如果 (结果 = 0)
是否已连接 = 假
按钮_连接.禁止 = 假
按钮_断开.禁止 = 真
按钮_读卡.禁止 = 真
状态条1.置文本 (0, "设备已断开")
时钟_状态监测.时钟周期 = 0
时钟_自动读卡.时钟周期 = 0
状态条1.置文本 (0, "断开失败,错误码: " + 到文本 (结果))

子程序名返回值类型公开备 注
_按钮_读卡_被单击  
读取sfz信息 ()
子程序名返回值类型公开备 注
_选择框_自动读卡_被单击  
自动读卡模式 = 选择框_自动读卡.选中
如果 (自动读卡模式)
时钟_自动读卡.时钟周期 = 500
状态条1.置文本 (0, "自动读卡模式已启用")
时钟_自动读卡.时钟周期 = 0
状态条1.置文本 (0, "自动读卡模式已关闭")

子程序名返回值类型公开备 注
_选择框_蜂鸣提示_被单击  
蜂鸣提示 = 选择框_蜂鸣提示.选中
子程序名返回值类型公开备 注
_时钟_状态监测_周期事件  
.局部变量 状态, 整数型
状态 = DLL命令_获取设备状态 (设备句柄)
状态条1.置文本 (1, 获取状态描述 (状态))
子程序名返回值类型公开备 注
获取状态描述文本型 
DLL命令名返回值类型公开备 注
(暂未填写DLL命令名)   
DLL库文件名:
(未填写库文件名)
在DLL库中对应命令名:
(未填写命令名)
参数名类 型传址数组备 注
状态码整数型
判断 (状态码 = 0)
返回 ("状态: 正常")
判断 (状态码 = -1)
返回 ("状态: 未连接")
判断 (状态码 = 1)
返回 ("状态: 设备忙")
判断 (状态码 = 2)
返回 ("状态: 通讯错误")
判断 (状态码 = 3)
返回 ("状态: 未发现卡片")
返回 ("状态: 未知 (" + 到文本 (状态码) + ")")

子程序名返回值类型公开备 注
_时钟_自动读卡_周期事件  
.局部变量 卡片状态, 整数型

' 限制读卡频率(至少间隔1秒)
如果真 (取启动时间 () - 上次读卡时间 < 1000)
返回 ()

卡片状态 = DLL命令_检测卡片 (设备句柄)
如果 (卡片状态 = 1)  ' 检测到卡片
读取sfz信息 ()
上次读卡时间 = 取启动时间 ()
如果 (卡片状态 < 0)
状态条1.置文本 (0, "读卡错误: " + 到文本 (卡片状态))


子程序名返回值类型公开备 注
读取sfz信息  
.局部变量 信息, 个人信息
.局部变量 照片数据, 字节集
.局部变量 照片长度, 整数型
.局部变量 读卡结果, 整数型

照片长度 = 1024 * 3  ' 3KB缓冲区
照片数据 = 取空白字节集 (照片长度)

' 读取sfz信息
读卡结果 = DLL命令_读基本信息 (设备句柄, 信息.姓名, 信息.性别, 信息.民族, 信息.出生日期,
信息.住址, 信息.sfz号, 信息.签发机关, 信息.有效起始, 信息.有效截止)

如果 (读卡结果 ≠ 0)
状态条1.置文本 (0, "读取失败: " + 到文本 (读卡结果))
如果 (蜂鸣提示)
DLL命令_蜂鸣提示 (设备句柄, 300)
返回 ()
' 读取照片
DLL命令_读取照片 (设备句柄, 照片数据, 照片长度)
显示sfz信息 (信息, 照片数据)
如果 (蜂鸣提示)
DLL命令_蜂鸣提示 (设备句柄, 100)


子程序名返回值类型公开备 注
显示sfz信息  
DLL命令名返回值类型公开备 注
(暂未填写DLL命令名)   
DLL库文件名:
(未填写库文件名)
在DLL库中对应命令名:
(未填写命令名)
参数名类 型传址数组备 注
信息个人信息
照片数据字节集

' 清空并添加信息
超级列表框1.全部删除 ()

如果 (照片数据[1] ≠ 0)
图片框1.图片 = 照片数据
图片框1.图片 = { }

' 使用循环添加信息项
添加信息项 ("姓名", 信息.姓名)
添加信息项 ("性别", 信息.性别)
添加信息项 ("民族", 信息.民族)
添加信息项 ("出生日期", 信息.出生日期)
添加信息项 ("sfz号", 信息.sfz号)
添加信息项 ("住址", 信息.住址)
添加信息项 ("签发机关", 信息.签发机关)
添加信息项 ("有效期", 信息.有效起始 + "至" + 信息.有效截止)
子程序名返回值类型公开备 注
添加信息项  
DLL命令名返回值类型公开备 注
(暂未填写DLL命令名)   
DLL库文件名:
(未填写库文件名)
在DLL库中对应命令名:
(未填写命令名)
参数名类 型传址数组备 注
类型文本型
内容文本型

.局部变量 索引, 整数型
索引 = 超级列表框1.插入表项 (-1, 类型, , , , )
超级列表框1.置标题 (索引, 1, 内容)
子程序名返回值类型公开备 注
__启动窗口_将被销毁  
如果真 (是否已连接)
DLL命令_关闭设备 (设备句柄)

窗口程序集名保 留  保 留备 注
个人信息   
.程序集变量 姓名, 文本型
.程序集变量 性别, 文本型
.程序集变量 民族, 文本型
.程序集变量 出生日期, 文本型
.程序集变量 住址, 文本型
.程序集变量 sfz号, 文本型
.程序集变量 签发机关, 文本型
.程序集变量 有效起始, 文本型
.程序集变量 有效截止, 文本型
' ========== 精简的DLL命令声明 ==========
DLL命令名返回值类型公开备 注
DLL命令_打开设备整数型 
DLL库文件名:
SS628(100)X.dll
在DLL库中对应命令名:
OpenComm
参数名类 型传址数组备 注
端口号整数型
DLL命令名返回值类型公开备 注
DLL命令_关闭设备整数型 
DLL库文件名:
SS628(100)X.dll
在DLL库中对应命令名:
CloseComm
参数名类 型传址数组备 注
设备句柄整数型
DLL命令名返回值类型公开备 注
DLL命令_检测卡片整数型 
DLL库文件名:
SS628(100)X.dll
在DLL库中对应命令名:
CardDetect
参数名类 型传址数组备 注
设备句柄整数型
DLL命令名返回值类型公开备 注
DLL命令_读基本信息整数型 
DLL库文件名:
SS628(100)X.dll
在DLL库中对应命令名:
ReadBaseInfo
参数名类 型传址数组备 注
设备句柄整数型
姓名文本型
性别文本型
民族文本型
出生日期文本型
住址文本型
sfz号文本型
签发机关文本型
有效起始文本型
有效截止文本型
DLL命令名返回值类型公开备 注
DLL命令_读取照片整数型 
DLL库文件名:
SS628(100)X.dll
在DLL库中对应命令名:
ReadPhoto
参数名类 型传址数组备 注
设备句柄整数型
照片数据字节集
照片长度整数型
DLL命令名返回值类型公开备 注
DLL命令_获取设备状态整数型 
DLL库文件名:
SS628(100)X.dll
在DLL库中对应命令名:
GetDevState
参数名类 型传址数组备 注
设备句柄整数型
DLL命令名返回值类型公开备 注
DLL命令_蜂鸣提示整数型 
DLL库文件名:
SS628(100)X.dll
在DLL库中对应命令名:
Beep
参数名类 型传址数组备 注
设备句柄整数型
持续时间整数型



i支持库列表   支持库注释   
iext扩展界面支持库一
eGrid高级表格支持库

回复

使用道具 举报

结帖率:88% (14/16)
地板
发表于 2025-6-21 17:29:38 | 只看该作者   广东省东莞市
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
设备句柄整数型  
是否已连接逻辑型  
自动读卡模式逻辑型  
蜂鸣提示逻辑型  
上次读卡时间长整数型  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
初始化界面 ()
检查SDK文件 ()
子程序名返回值类型公开备 注
初始化界面  
标题 = "神思读卡器优化版"
按钮_连接.标题 = "连接设备"
按钮_断开.标题 = "断开连接"
按钮_断开.禁止 = 真
按钮_读卡.禁止 = 真
状态条1.置文本 (0, "就绪")

' 初始化个人信息列表
超级列表框1.插入列 (0, "信息类型", 100)
超级列表框1.插入列 (1, "信息内容", 300)
超级列表框1.显示网格线 = 真

' 设置默认选项
蜂鸣提示 = 真
选择框_蜂鸣提示.选中 = 真
子程序名返回值类型公开备 注
检查SDK文件  
如果真 (文件是否存在 (取运行目录 () + "\SS628 (100)X.dll"))
信息框 ("SDK文件缺失,请将SS628 (100)X.dll放入程序目录", #错误图标, "错误")
结束 ()

子程序名返回值类型公开备 注
_按钮_连接_被单击  
.局部变量 端口号, 整数型
端口号 = 1001  ' USB端口

' 初始化并连接设备
设备句柄 = DLL命令_打开设备 (端口号)

如果 (设备句柄 > 0)
是否已连接 = 真
按钮_连接.禁止 = 真
按钮_断开.禁止 = 假
按钮_读卡.禁止 = 假
状态条1.置文本 (0, "设备连接成功")
时钟_状态监测.时钟周期 = 1000
状态条1.置文本 (0, "连接失败,错误码: " + 到文本 (设备句柄))

子程序名返回值类型公开备 注
_按钮_断开_被单击  
.局部变量 结果, 整数型
结果 = DLL命令_关闭设备 (设备句柄)

如果 (结果 = 0)
是否已连接 = 假
按钮_连接.禁止 = 假
按钮_断开.禁止 = 真
按钮_读卡.禁止 = 真
状态条1.置文本 (0, "设备已断开")
时钟_状态监测.时钟周期 = 0
时钟_自动读卡.时钟周期 = 0
状态条1.置文本 (0, "断开失败,错误码: " + 到文本 (结果))

子程序名返回值类型公开备 注
_按钮_读卡_被单击  
读取sfz信息 ()
子程序名返回值类型公开备 注
_选择框_自动读卡_被单击  
自动读卡模式 = 选择框_自动读卡.选中
如果 (自动读卡模式)
时钟_自动读卡.时钟周期 = 500
状态条1.置文本 (0, "自动读卡模式已启用")
时钟_自动读卡.时钟周期 = 0
状态条1.置文本 (0, "自动读卡模式已关闭")

子程序名返回值类型公开备 注
_选择框_蜂鸣提示_被单击  
蜂鸣提示 = 选择框_蜂鸣提示.选中
子程序名返回值类型公开备 注
_时钟_状态监测_周期事件  
.局部变量 状态, 整数型
状态 = DLL命令_获取设备状态 (设备句柄)
状态条1.置文本 (1, 获取状态描述 (状态))
子程序名返回值类型公开备 注
获取状态描述文本型 
DLL命令名返回值类型公开备 注
(暂未填写DLL命令名)   
DLL库文件名:
(未填写库文件名)
在DLL库中对应命令名:
(未填写命令名)
参数名类 型传址数组备 注
状态码整数型
判断 (状态码 = 0)
返回 ("状态: 正常")
判断 (状态码 = -1)
返回 ("状态: 未连接")
判断 (状态码 = 1)
返回 ("状态: 设备忙")
判断 (状态码 = 2)
返回 ("状态: 通讯错误")
判断 (状态码 = 3)
返回 ("状态: 未发现卡片")
返回 ("状态: 未知 (" + 到文本 (状态码) + ")")

子程序名返回值类型公开备 注
_时钟_自动读卡_周期事件  
.局部变量 卡片状态, 整数型

' 限制读卡频率(至少间隔1秒)
如果真 (取启动时间 () - 上次读卡时间 < 1000)
返回 ()

卡片状态 = DLL命令_检测卡片 (设备句柄)
如果 (卡片状态 = 1)  ' 检测到卡片
读取sfz信息 ()
上次读卡时间 = 取启动时间 ()
如果 (卡片状态 < 0)
状态条1.置文本 (0, "读卡错误: " + 到文本 (卡片状态))


子程序名返回值类型公开备 注
读取sfz信息  
.局部变量 信息, 个人信息
.局部变量 照片数据, 字节集
.局部变量 照片长度, 整数型
.局部变量 读卡结果, 整数型

照片长度 = 1024 * 3  ' 3KB缓冲区
照片数据 = 取空白字节集 (照片长度)

' 读取sfz信息
读卡结果 = DLL命令_读基本信息 (设备句柄, 信息.姓名, 信息.性别, 信息.民族, 信息.出生日期,
信息.住址, 信息.sfz号, 信息.签发机关, 信息.有效起始, 信息.有效截止)

如果 (读卡结果 ≠ 0)
状态条1.置文本 (0, "读取失败: " + 到文本 (读卡结果))
如果 (蜂鸣提示)
DLL命令_蜂鸣提示 (设备句柄, 300)
返回 ()
' 读取照片
DLL命令_读取照片 (设备句柄, 照片数据, 照片长度)
显示sfz信息 (信息, 照片数据)
如果 (蜂鸣提示)
DLL命令_蜂鸣提示 (设备句柄, 100)


子程序名返回值类型公开备 注
显示sfz信息  
DLL命令名返回值类型公开备 注
(暂未填写DLL命令名)   
DLL库文件名:
(未填写库文件名)
在DLL库中对应命令名:
(未填写命令名)
参数名类 型传址数组备 注
信息个人信息
照片数据字节集

' 清空并添加信息
超级列表框1.全部删除 ()

如果 (照片数据[1] ≠ 0)
图片框1.图片 = 照片数据
图片框1.图片 = { }

' 使用循环添加信息项
添加信息项 ("姓名", 信息.姓名)
添加信息项 ("性别", 信息.性别)
添加信息项 ("民族", 信息.民族)
添加信息项 ("出生日期", 信息.出生日期)
添加信息项 ("sfz号", 信息.sfz号)
添加信息项 ("住址", 信息.住址)
添加信息项 ("签发机关", 信息.签发机关)
添加信息项 ("有效期", 信息.有效起始 + "至" + 信息.有效截止)
子程序名返回值类型公开备 注
添加信息项  
DLL命令名返回值类型公开备 注
(暂未填写DLL命令名)   
DLL库文件名:
(未填写库文件名)
在DLL库中对应命令名:
(未填写命令名)
参数名类 型传址数组备 注
类型文本型
内容文本型

.局部变量 索引, 整数型
索引 = 超级列表框1.插入表项 (-1, 类型, , , , )
超级列表框1.置标题 (索引, 1, 内容)
子程序名返回值类型公开备 注
__启动窗口_将被销毁  
如果真 (是否已连接)
DLL命令_关闭设备 (设备句柄)

窗口程序集名保 留  保 留备 注
个人信息   
.程序集变量 姓名, 文本型
.程序集变量 性别, 文本型
.程序集变量 民族, 文本型
.程序集变量 出生日期, 文本型
.程序集变量 住址, 文本型
.程序集变量 sfz号, 文本型
.程序集变量 签发机关, 文本型
.程序集变量 有效起始, 文本型
.程序集变量 有效截止, 文本型
' ========== 精简的DLL命令声明 ==========
DLL命令名返回值类型公开备 注
DLL命令_打开设备整数型 
DLL库文件名:
SS628(100)X.dll
在DLL库中对应命令名:
OpenComm
参数名类 型传址数组备 注
端口号整数型
DLL命令名返回值类型公开备 注
DLL命令_关闭设备整数型 
DLL库文件名:
SS628(100)X.dll
在DLL库中对应命令名:
CloseComm
参数名类 型传址数组备 注
设备句柄整数型
DLL命令名返回值类型公开备 注
DLL命令_检测卡片整数型 
DLL库文件名:
SS628(100)X.dll
在DLL库中对应命令名:
CardDetect
参数名类 型传址数组备 注
设备句柄整数型
DLL命令名返回值类型公开备 注
DLL命令_读基本信息整数型 
DLL库文件名:
SS628(100)X.dll
在DLL库中对应命令名:
ReadBaseInfo
参数名类 型传址数组备 注
设备句柄整数型
姓名文本型
性别文本型
民族文本型
出生日期文本型
住址文本型
sfz号文本型
签发机关文本型
有效起始文本型
有效截止文本型
DLL命令名返回值类型公开备 注
DLL命令_读取照片整数型 
DLL库文件名:
SS628(100)X.dll
在DLL库中对应命令名:
ReadPhoto
参数名类 型传址数组备 注
设备句柄整数型
照片数据字节集
照片长度整数型
DLL命令名返回值类型公开备 注
DLL命令_获取设备状态整数型 
DLL库文件名:
SS628(100)X.dll
在DLL库中对应命令名:
GetDevState
参数名类 型传址数组备 注
设备句柄整数型
DLL命令名返回值类型公开备 注
DLL命令_蜂鸣提示整数型 
DLL库文件名:
SS628(100)X.dll
在DLL库中对应命令名:
Beep
参数名类 型传址数组备 注
设备句柄整数型
持续时间整数型



i支持库列表   支持库注释   
iext扩展界面支持库一
eGrid高级表格支持库

回复

使用道具 举报

结帖率:80% (8/10)

签到天数: 5 天

地下
发表于 2025-6-23 01:03:57 | 只看该作者   山东省枣庄市
1. 我们没有你这个型号的读卡器,你得把SDK什么的都发来,然后写完给你测试正常才ok
2. 100精币能有人写吗,建议rmb
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表