200分求一个做好的智能卡门锁接口函数接口...

拒绝访问 | www.znjj.tv | 百度云加速
请打开cookies.
此网站 (www.znjj.tv) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3d9f08b8f50c43d7-ua98).
重新安装浏览器,或使用别的浏览器查看: 264|回复: 4
有关智能卡函数操作相关问题
阅读权限90
结帖率: (5/10)
最近没什么事,就想做一个用智能卡的会员管理系统,于是上网买了个读卡器,和几张智能卡,用来测试,acr22u比较便宜就买的它,可惜官方的开发包实在看不懂,但是发现这个支持windos的pc/sc,于是就去找智能卡函数的资料,可惜资料是英文的而且是c++的,看不懂,只能边百度翻译,边尝试理解,这个是第一步,百度翻译的是建立资源管理器句柄,我也不明白为什么这么叫,
SCardEstablishContext函数官方介绍
https://technet.microsoft.com/zh-cn/library/aa379479
&&SCardEstablishContext长整数型&返回资源管理器上下文的句柄WinSCard.dllSCardEstablishContextdwScope整数型&&:SCARD_SCOPE_USER& &0pvReserved1整数型&&nullpvReserved2整数型&&nullphContext整数型√&.版本 2
.DLL命令 SCardEstablishContext, 长整数型, &WinSCard.dll&, &SCardEstablishContext&, , 返回资源管理器上下文的句柄
& & .参数 dwScope, 整数型, , :SCARD_SCOPE_USER& &0
& & .参数 pvReserved1, 整数型, , null
& & .参数 pvReserved2, 整数型, , null
& & .参数 phContext, 整数型, 传址
上面的函数已经没问题了改写成就是下面这个样子
&&建立管理器整数型&b&√&c&√&局资源管理器句柄整数型&&SCARD_S_SUCCESS整数型&&SCARD_S_SUCCESS = SCardEstablishContext ( #SCARD_SCOPE_SYSTEM, b, c, 局资源管理器句柄)调试输出 (SCARD_S_SUCCESS)返回 (局资源管理器句柄)spec特殊功能支持库
.版本 2
.支持库 spec
.子程序 建立管理器, 整数型
.参数 b, , 可空
.参数 c, , 可空
.局部变量 局资源管理器句柄, 整数型
.局部变量 SCARD_S_SUCCESS, 整数型
SCARD_S_SUCCESS = SCardEstablishContext (#SCARD_SCOPE_SYSTEM, b, c, 局资源管理器句柄)
调试输出 (SCARD_S_SUCCESS)
返回 (局资源管理器句柄)这个已经正常因为整数型的null不知道如何表达,就就建了两个参数然后不填写,
获得资源管理器的句柄,下面会用到
第二步获取系统中读卡器的列表SCardListReaders
函数介绍https://msdn.microsoft.com/en-us/library/windows/desktop/aa379793(v=vs.85).aspx
了解这个的时候发现有两个一个SCardListReadersA一个SCardListReadersW,百度了一下才是到分别是A=ansi然后w=unicode
好像原来听说过易不支持unicode所以最后用了SCardListReadersA
&&SCardListReaders整数型&获得系统中安装的读卡器列表WinSCard.dllSCardListReadersAhContex整数型&&资源管理器上下文的句柄mszGroups文本型&&mszGroups:输入类型;读卡器组名,为NULL时,表示列出所有读卡器。mszReaders文本型√&mszReaders:输出类型;系统中安装的读卡器的名字pcchReaders整数型√&pcchReaders:输入输出类型;mszReaders的长度。.版本 2
.DLL命令 SCardListReaders, 整数型, &WinSCard.dll&, &SCardListReadersA&, , 获得系统中安装的读卡器列表
& & .参数 hContex, 整数型, , 资源管理器上下文的句柄
& & .参数 mszGroups, 文本型, , mszGroups:输入类型;读卡器组名,为NULL时,表示列出所有读卡器。
& & .参数 mszReaders, 文本型, 传址, mszReaders:输出类型;系统中安装的读卡器的名字
& & .参数 pcchReaders, 整数型, 传址, pcchReaders:输入输出类型;mszReaders的长度。到这步已经开始出现问题了,&&获得列表&&啊啊整数型&&SCARD_S_SUCCESS整数型&&长度整数型&&SCARD_READERSTATE文本型&&列表文本型&&调试输出 (SCardListReaders (建立管理器 (), “”, SCARD_READERSTATE, 长度))调试输出 (“----”)调试输出 (SCARD_READERSTATE)调试输出 (长度)spec特殊功能支持库
.版本 2
.支持库 spec
.子程序 获得列表
.局部变量 啊啊, 整数型
.局部变量 SCARD_S_SUCCESS, 整数型
.局部变量 长度, 整数型
.局部变量 SCARD_READERSTATE, 文本型
.局部变量 列表, 文本型
调试输出 (SCardListReaders (建立管理器 (), “”, SCARD_READERSTATE, 长度))
调试输出 (“----”)
调试输出 (SCARD_READERSTATE)
调试输出 (长度)看函数介绍翻译SCARD_READERSTATE就应该是返回的读卡器名字,“长度”返回名字字节数,但是调试后返回SCARD_READERSTATE返回空,字节数返回14
我怕错所以把读卡器拔了又重新获取了一次,长度变为0,SCARD_READERSTATE依然是空,我就感觉这个参数错了,可能是个结构数据,但是我不知道具体什么样,也不知道成员有什么,成员是文本型还是整数型,没有读卡器名字就无法发送数据,数据结构第一次解决不了,下面的问题还是另一个数据结构搞不懂,
获取不到读卡器名字怎么办呢,我想到了一个办法,从别人已经写好的程序里获取名字,
http://bbs.eyuyan.com/read.php?tid=395095这个帖子里的dome程序,是可以操作我的读卡器的,于是直接从他这里复制读卡器名字获得“ACS ACR122 0”这个名字,下面会用到。
第三步,建立连接,获取智能卡的句柄SCardConnect
官方函数介绍https://msdn.microsoft.com/en-us/library/windows/desktop/aa379473(v=vs.85).aspx
&&SCardConnectA长整数型√建立与智能卡的连接WinSCard.dllSCardConnectAhContext整数型&&输入类型;ScardEstablishContext()建立的资源管理器上下文的句柄。szReader文本型&&,输入类型;包含智能卡的读卡器名称(读卡器名称由ScardListReaders()给出)dwShareMode整数型&&,dwShareMode:输入类型;应用程序对智能卡的操作方式,SCARD_SHARE_SHARED(多个应用共享同一个智能卡)、SCARD_SHARE_EXCLUSIVE(应用独占智能卡)、SCARD_SHARE_DIRECT(应用将智能卡作为私有用途,直接操纵智能卡,不允许其它应用访问智能卡)。dwPreferredProtocols整数型&&,dwPreferredProtocols:输入类型;连接使用的协yi,SCARD_PROTOCOL_T0(使用T=0协yi)、SCARD_PROTOCOL_T1(使用T=1协yi)。phCard整数型√&phCard:输出类型;与智能卡连接的句柄。PdwActiveProtocol整数型√&PdwActiveProtocol:输出类型;实际使用的协yi。.版本 2
.DLL命令 SCardConnectA, 长整数型, &WinSCard.dll&, &SCardConnectA&, 公开, 建立与智能卡的连接
& & .参数 hContext, 整数型, , 输入类型;ScardEstablishContext()建立的资源管理器上下文的句柄。
& & .参数 szReader, 文本型, , ,输入类型;包含智能卡的读卡器名称(读卡器名称由ScardListReaders()给出)
& & .参数 dwShareMode, 整数型, , ,dwShareMode:输入类型;应用程序对智能卡的操作方式,SCARD_SHARE_SHARED(多个应用共享同一个智能卡)、SCARD_SHARE_EXCLUSIVE(应用独占智能卡)、SCARD_SHARE_DIRECT(应用将智能卡作为私有用途,直接操纵智能卡,不允许其它应用访问智能卡)。
& & .参数 dwPreferredProtocols, 整数型, , ,dwPreferredProtocols:输入类型;连接使用的协yi,SCARD_PROTOCOL_T0(使用T=0协yi)、SCARD_PROTOCOL_T1(使用T=1协yi)。
& & .参数 phCard, 整数型, 传址, phCard:输出类型;与智能卡连接的句柄。
& & .参数 PdwActiveProtocol, 整数型, 传址, PdwActiveProtocol:输出类型;实际使用的协yi。
易语言调用这个是为一个比较顺利的函数了,第二个参数读卡器名称,我获取不到,直接填入从别人那里获取的,
&&建立连接1整数型&管理器句柄整数型&&智能卡句柄整数型&&协yi整数型&&管理器句柄 = 建立管理器 ()调试输出 (SCardConnectA (读卡器句柄, “ACS ACR122 0”, #SCARD_SHARE_SHARED, #SCARD_PROTOCOL_T1, 智能卡句柄, 协yi))返回 (智能卡句柄)spec特殊功能支持库
.版本 2
.支持库 spec
.子程序 建立连接1, 整数型
.局部变量 管理器句柄, 整数型
.局部变量 智能卡句柄, 整数型
.局部变量 协yi, 整数型
管理器句柄 = 建立管理器 ()
调试输出 (SCardConnectA (读卡器句柄, “ACS ACR122 0”, #SCARD_SHARE_SHARED, #SCARD_PROTOCOL_T1, 智能卡句柄, 协yi))
返回 (智能卡句柄)
获得智能卡句柄,下面函数会用到
第四步,发送数据并接受返回数据SCardTransmit
官方函数介绍
https://msdn.microsoft.com/en-us/library/windows/desktop/aa379804(v=vs.85).aspx
&&SCardTransmit整数型&向智能卡发送指令,并接受返回的数据。WinSCard.dllSCardTransmithCard整数型&&,hCard:输入类型;与智能卡连接的句柄。pioSendPci整数型&&,pioSendPci:输入类型;指令的协yi头结构的指针,由SCARD_IO_REQUEST结构定义。后面是使用的协yi的协yi控制信息。一般使用系统定义的结构,SCARD_PCI_T0(T=0协yi)、 SCARD_PCI_T1(T=1协yi)、SCARD_PCI_RAW(原始协yi)。pbSendBuffer文本型√&,pbSendBuffer:输入类型;要发送到智能卡的数据的指针。(cbSendLength整数型&&,cbSendLength:输入类型;pbSendBuffer的字节数目。pioRecvPci文本型√&pioRecvPci:输入输出类型;指令协yi头结构的指针,后面是使用的协yi的协yi控制信息,如果不返回协yi控制信息,可以为NULL。pbRecvBuffer文本型√&pbRecvBuffer:输入输出类型;从智能卡返回的数据的指针。pcbRecvLength整数型√&pcbRecvLength:输入输出类型;pbRecvBuffer的大小和实际大小。.版本 2
.DLL命令 SCardTransmit, 整数型, &WinSCard.dll&, &SCardTransmit&, , 向智能卡发送指令,并接受返回的数据。
& & .参数 hCard, 整数型, , ,hCard:输入类型;与智能卡连接的句柄。
& & .参数 pioSendPci, 整数型, , ,pioSendPci:输入类型;指令的协yi头结构的指针,由SCARD_IO_REQUEST结构定义。后面是使用的协yi的协yi控制信息。一般使用系统定义的结构,SCARD_PCI_T0(T=0协yi)、 SCARD_PCI_T1(T=1协yi)、SCARD_PCI_RAW(原始协yi)。
& & .参数 pbSendBuffer, 文本型, 传址, ,pbSendBuffer:输入类型;要发送到智能卡的数据的指针。(
& & .参数 cbSendLength, 整数型, , ,cbSendLength:输入类型;pbSendBuffer的字节数目。
& & .参数 pioRecvPci, 文本型, 传址, pioRecvPci:输入输出类型;指令协yi头结构的指针,后面是使用的协yi的协yi控制信息,如果不返回协yi控制信息,可以为NULL。
& & .参数 pbRecvBuffer, 文本型, 传址, pbRecvBuffer:输入输出类型;从智能卡返回的数据的指针。
& & .参数 pcbRecvLength, 整数型, 传址, pcbRecvLength:输入输出类型;pbRecvBuffer的大小和实际大小。
易语言调用
&&_按钮1_被单击&&数据APDU&&数据.CLA = 到字节 (十六进制 (“ff”))数据.ins = 到字节 (十六进制 (“00”))数据.p1 = 到字节 (十六进制 (“40”))数据.p2 = 到字节 (十六进制 (“06”))数据.le = 到字节 (十六进制 (“04”))数据.p3 = 到字节 (十六进制 (“”)) ' 上面数据结构自己编 的感觉不对就没有那个智能卡发送指令 (集智能卡句柄, “FF 00 40 0F 04 00 00 00 00h”)智能卡发送指令&&智能卡句柄整数型&&&APDU内容文本型&&&APDU = “FF 00 40 50 04 05 05 03 01h”& &红灯闪烁 啊啊整数型&√&a文本型&&b文本型&&c整数型&&调试输出 (SCardTransmit (智能卡句柄, 2, APDU内容, 取文本长度 (APDU内容) - 1, a, b, c)) ' 如果返回“6”,则是智能卡句柄错误调试输出 (a, b, c, 取文本长度 (APDU内容), 智能卡句柄)spec特殊功能支持库
.版本 2
.支持库 spec
.子程序 _按钮1_被单击
.局部变量 数据, APDU
数据.CLA = 到字节 (十六进制 (“ff”))
数据.ins = 到字节 (十六进制 (“00”))
数据.p1 = 到字节 (十六进制 (“40”))
数据.p2 = 到字节 (十六进制 (“06”))
数据.le = 到字节 (十六进制 (“04”))
数据.p3 = 到字节 (十六进制 (“”))
' 上面数据结构自己编 的感觉不对就没有那个
智能卡发送指令 (集智能卡句柄, “FF 00 40 0F 04 00 00 00 00h”)
.子程序 智能卡发送指令
.参数 智能卡句柄, 整数型
.参数 APDU内容, 文本型, , APDU = “FF 00 40 50 04 05 05 03 01h”& &红灯闪烁
.参数 啊啊, 整数型, 可空
.局部变量 a, 文本型
.局部变量 b, 文本型
.局部变量 c, 整数型
调试输出 (SCardTransmit (智能卡句柄, 2, APDU内容, 取文本长度 (APDU内容) - 1, a, b, c))
' 如果返回“6”,则是智能卡句柄错误
调试输出 (a, b, c, 取文本长度 (APDU内容), 智能卡句柄)到这又遇到一个数据结构问题,就是第3个参数,“APDU”看翻译应该也是一个数据结构,但是我还是看不懂c++的那种翻译到易语言什么样子,。
我翻过的资料地址
这个是偶尔返回错误代码的解释,比如6句柄错误,1734,数据边界错误
http://www.cnblogs.com/braver/articles/2563157.html
函数错误代码介绍,易语言需要用计算器算一下返回的代码十进制转十六进制再到下面去找错误代码介绍,比如“-”=“0x”:一个或多个参数错误
https://msdn.microsoft.com/en-us/library/windows/desktop/aa374738(v=vs.85).aspx#smart_card_return_values
以上内容主要参考这两个,但是这个是vb的,唉,易语言这方面资料太少了
http://blog.sina.com.cn/s/blog_auy9u.html
http://www.cnblogs.com/android-html5/archive//2533989.html
现在想问问有谁研究过这方面的资料源码,能不能分享一下,或者能知道获取列表的数据结构和发送数据的数据结构在易语言里什么样子,,如果看到我上面有什么错误麻烦指出来,我好继续改。
下面是我用到的资料文件以及我暂时写的源码。
post_newreply
阅读权限90
结帖率: (5/10)
这里是资料附件
(2.89 MB, 下载次数: 6)
14:01 上传
点击文件名下载附件
下载积分: 精币 -1 枚
阅读权限120
结帖率: (3/3)
哇 感觉像是在看定制单
阅读权限20
有源码吗?
试了下,感觉挺简单的,就是没有返回值做参考,调试比较慢。
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
揭阳精易科技有限公司申明:我公司所有的培训课程版权归精易所有,任何人以任何方式翻录、盗版、破解本站培训课程,我们必将通过法律途径解决!
公司简介:揭阳市揭东区精易科技有限公司致力于易语言教学培训/易语言学习交流社区的建设与软件开发,多年来为中小企业编写过许许多多各式软件,并把多年积累的开发经验逐步录制成视频课程供学员学习,让学员全面系统化学习易语言编程,少走弯路,减少对相关技术的研究与摸索时间,从而加快了学习进度!
防范网络诈骗,远离网络犯罪
违法和不良信息举报电话,QQ: ,邮箱:@b.qq.com
Powered by
粤公网安备 25The following error occurred:
The requested URL was not found on this server.
Please check the URL or contact the webmaster.扫一扫,随时随地挑选人才和公司
无线工作台,管理更高效更自由
微信公众号
随时掌握一手资讯
需求发布后1小时内收到服务商响应每个需求平均有10个服务商参与95%以上的需求得到了圆满解决所有需求不向雇主收取任何佣金电商年终狂欢,爆款服务助力冲冠
制作门锁接口,超简单的几个函数调用!
制作门锁接口,超简单的几个函数调用!
雇主预算:¥200.00
已收到 0 个服务商的文案稿件
有相似问题想解决?专业顾问来帮助您
通过猪八戒网实名认证,保证身份真实可靠
完成手机认证,保证能随时联系到服务商
该需求下的优秀交稿
交易成功的需求
其它工具软件相关需求门锁接口函数要钱吗
门锁接口函数要钱吗
09-07-10 &匿名提问
去年参加wincc7的一个介绍会,曾经提到了wincc7的报警增加了所谓的高级过滤功能,即面对大量的报警导致关键的报警被淹没,wincc7提供了一种智能化的过滤策略。前段时间参加了pcs7V7的介绍,也提到了这个功能。事实上在以前的项目里面很少会想到做报警过滤的功能,用户也基本上没有这方面的要求,在实际运行过程中,一般都是一页一页的翻看过往的报警。而在事故的时候,系统产生的报警特别多,此时要找出有用的报警就需要耐心和细心了。又或者一个大型系统,很多设备但是集中监控,那么就可以按照设备和区域来显示各自的报警。现在想想,有时候报警过滤应该是很有用的,比如按类别过滤,按时间过滤,按报警文本内容过滤以及综合几个条件进行过滤等等。
请登录后再发表评论!

我要回帖

更多关于 门锁接口 的文章

 

随机推荐