import ctypes #调用DLL必须有这个引用

import sys

import os

#!/usr/bin/env python

# -*- coding: utf-8 -*-

#加载当前目录下的DLL

dllfile=sys.path[0]+'\OUR_MIFARE.dll'

Objdll = ctypes.windll.LoadLibrary(dllfile)

Objdll = ctypes.WinDLL(dllfile)

#控制字定义

BLOCK0_EN=eval('0x01') #读写块0

BLOCK1_EN=eval('0x02') #读写块1

BLOCK2_EN=eval('0x04') #读写块2

NEEDSERIAL=eval('0x08') #读写指定序列号的卡

EXTERNKEY=eval('0x10') #需要每次指定密码

NEEDHALT=eval('0x20') #写卡后是否休眠卡

#根据入口参数执行不同功能

if(len(sys.argv)>1):

if(str(sys.argv[1])=='0'): #驱动读写器发出响声

Objdll.pcdbeep(50)

elif(str(sys.argv[1])=='1'): #读取设备的出厂编号

devno=bytes([0,0,0,0]) #声明4个字节缓冲

status=Objdll.pcdgetdevicenumber(devno)

if(status==0):

Objdll.pcdbeep(38)

SerialNum=''

for num in range(0,len(devno)):

SerialNum=SerialNum+'%02x' % (devno[num])

if(num

SerialNum=SerialNum+'-'

print('设备出厂编号:'+ SerialNum)

elif(str(sys.argv[1])=='2'): #读取卡内数据

myctrlword=BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY #读写控制字

myareano=8 #指定读写区号为第8区

authmode=1 #大于0表示用A密码认证,推荐用A密码认证

mypicckey=bytes([eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF')]) #卡片认证密码,16进制

mypiccserial=bytes([0,0,0,0]) #卡序列号

mypiccdata=bytes([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]) #读出卡内数据

status = Objdll.piccreadex(myctrlword, mypiccserial, myareano, authmode, mypicckey, mypiccdata)

if(status==0):

Objdll.pcdbeep(38)

Cardno=mypiccserial[0]

Cardno=Cardno+(mypiccserial[1]*256)

Cardno=Cardno+(mypiccserial[2]*65536)

Cardno=Cardno+(mypiccserial[3]*16777216)

CardnoStr='%010d' % Cardno

print('10进制卡号:'+CardnoStr)

piccdataStr=''

for num in range(0,len(mypiccdata)):

piccdataStr=piccdataStr+'%02x ' % (mypiccdata[num])

print('卡内数据:'+ piccdataStr)

elif(status==8):

print('请将卡片放置在读写器的感应区!')

elif(status==12):

print('卡片密码认证失败!')

elif():

print('读卡失败,错误代码:'+str(status))

elif(str(sys.argv[1])=='3'): #写数据到卡内

myctrlword=BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY #读写控制字

myareano=8 #指定读写区号为第8区

authmode=1 #大于0表示用A密码认证,推荐用A密码认证

mypicckey=bytes([eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF')]) #卡片认证密码,16进制

mypiccserial=bytes([0,0,0,0]) #卡序列号

#mypiccdata=bytes([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47]) #写入卡片内数据,一个扇区最多写入48个字节

#如果要写字符串等信息,将字符串转成字节数组写入

Writeinf='伟大的中华人民共和国万岁!2020-weidadezhonhuarenmingongheguowangshi'

Writeinf=Writeinf[0:48] #一个扇区最多写48个字节

mypiccdata=bytes(Writeinf, encoding='gbk') #将要写入的信息转bytes

status = Objdll.piccwriteex(myctrlword, mypiccserial, myareano, authmode, mypicckey, mypiccdata)

if(status==0):

Objdll.pcdbeep(38)

print('写卡成功')

elif(status==8):

print('请将卡片放置在读写器的感应区!')

elif(status==12):

print('卡片密码认证失败!')

elif():

print('写卡失败,错误代码:'+str(status))

elif(str(sys.argv[1])=='4'): #修改卡片的A密码+控制字+B密码

myctrlword=BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY #读写控制字

myareano=8 #指定读写区号为第8区

authmode=1 #大于0表示用A密码认证,推荐用A密码认证

mypiccoldkey=bytes([eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF')]) #卡片认证密码,16进制

#mypiccnewkey 指定6字节新A密码+4字节控制码+6字节B密码+1字节功能码 ,注意:指定新密码时一定要记住,否则有可能找不回密码,导致该卡报废!!!

#功能码为:3 表示同时更改A、B 密码及权限访问字

#功能码为:2 表示密码权限访问字不更改,只改A、B密码

#功能码为:0 示只改A密码

mypiccnewkey=bytes([eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0x07'),eval('0x80'),eval('0x69'),eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0xFF'),eval('0x03')])

mypiccserial=bytes([0,0,0,0]) #卡序列号

status = Objdll.piccchangesinglekeyex(myctrlword, mypiccserial, myareano, authmode, mypiccoldkey, mypiccnewkey)

if(status==0):

Objdll.pcdbeep(38)

print('更改卡密码成功')

elif(status==8):

print('请将卡片放置在读写器的感应区!')

elif(status==12):

print('卡片密码认证失败!')

elif():

print('更改卡密码失败,错误代码:'+str(status))

else:

print('请加入正确的参数运行程序')

else:

print('\n')

print('请加以下参数运行程序:')

print('参数 0 驱动读卡器嘀一声')

print('参数 1 读4个字节设备编号')

print('参数 2 读48个字节卡内数据')

print('参数 3 写48个字节数据到卡内')

print('参数 4 修改卡片密码')

sys.exit()

#QQ:954486673

#微信:13822155058

python加载dll后如何查看函数_Python调用DLL带指针函数读写IC卡相关推荐

  1. python如何调用dll库中的函数_Python调用dll库接口-ctypes方法

    背景 最近需要用python写个脚本程序(win10 环境),需要调用现成的dll库完成这项任务,对于一直在Linux平台上开发程序的本人来说,从没有过使用dll的经历(不得不说还是so大法好),遇到 ...

  2. Pandas将dataframe保存为pickle文件并加载保存后的pickle文件查看dataframe数据实战

    Pandas将dataframe保存为pickle文件并加载保存后的pickle文件查看dataframe数据实战 目录 Pandas将dataframe保存为pickle文件并加载保存后的pickl ...

  3. html等待图片全部加载,imgLoad等待图片资源加载完成后执行函数(图片预加载)...

    修改自一个2013年写的js判断图片资源加载完成后再执行函数的代码: 当时的代码片断需要手动加入需要确定加载完的图片名称到数组,比较麻烦,修改为插件后,不需要手动添加文件名称,只需对需要确定加载完成的 ...

  4. vue组件加载完成之后执行方法_vuejs页面加载完成后执行函数

    module.exports = { data: function(){ return { memberQrcodeState: false } }, components: {memberQrcod ...

  5. html动态加载js方法,原生JS实现动态加载js文件并在加载成功后执行回调函数的方法...

    本文实例讲述了原生JS实现动态加载js文件并在加载成功后执行回调函数的方法.分享给大家供大家参考,具体如下: 有的时候需要动态加载一个javascript文件,并且在加载成功后执行回调函数(例如文件中 ...

  6. js 和jQuery(自动执行函数)立即执行函数和页面加载完后执行函数写法

    js 立即执行函数的写法. js 立即执行函数只能用于匿名函数,如果声明了函数名是不可以用立即执行的,通常在函数表达式后加一对小括号()用于立即执行 如果想让函数不被调用的情况下,立即自动执行,需要在 ...

  7. python加载shellcode免杀 简介

    目录 前言 0X00  基础概念 1. python ctypes模块介绍 2. dll动态链接库 3. pyinstaller 4. shellcode 5.关于windows defender 6 ...

  8. python怎么加载图片-怎样用python加载dicom图片

    用python加载dicom图片的方法:使用pydicom.CV2.numpy.matplotlib等库即可.pydicom库是专门用来处理dicom图像的python专用库. python读取DIC ...

  9. 在ArcMap中制作Python加载项线连接工具

    学习Python加载项可以参考: 使用python制作ArcGIS插件(1)工具介绍 使用python制作ArcGIS插件(2)代码编写 使用python制作ArcGIS插件(3)ArcPy的使用说明 ...

  10. 【滴水逆向P77】加载进程(PE查看器)应用程序源码解析

    在上一篇文章中讲解了通用控件,做了一个基本的加载进程(PE查看器)的应用程序项目,Win32通用控件,加载进程(PE查看器)项目初步,大家如果有不懂的可以去看看,由于不是很了解Win32编程,所以有很 ...

最新文章

  1. 导入自定义模块model
  2. CoreAPI_对象三种状态
  3. 48个越吃越瘦的诀窍 - 生活至上,美容至尚!
  4. 【LeetCode - 32】最长有效括号
  5. easyui input输入框的限制和校验条件
  6. 《编程能力基础》刷题笔记(41 题)
  7. IMI 基于 Swoole 开发的协程 PHP 开发框架 常驻内存、协程异步非阻塞
  8. Windows平台release版本内存泄漏检查办法
  9. 马尔科夫决策过程(MDP) : GridWord(DP)
  10. TOC约束理论AUTOCAD技巧
  11. 代码 点胶gcode_3D打印机启停代码Gcode
  12. Datastage,Informatica,Kettle
  13. Python代码实现飞机大战
  14. 对接快递100快递管家API之订单快速打印接口
  15. 关于 MySQLTransactionRollbackException 异常的排查经历
  16. CSS--2D 3D
  17. kotlin的wifi获取列表和连接指定wifi
  18. Java大数据工程师面试宝典
  19. 虚拟机使用vm8模式上网
  20. [Golang数据库专题4]Golang语言操作PostgreSQL进行增删改查

热门文章

  1. SpringBoot下Mybatis-注解动态sql开发的坑
  2. 手把手教你 如何安装 Ubuntu(乌班图)
  3. 计算机数字雨代码,cmd命令数字雨教程
  4. sqlyog的快捷键
  5. char wchar_t ascii unicode 之旅
  6. SQL 获取当前系统时间 以及对日期的加减处理
  7. 计算机房用还原保护软件,“小哨兵”还原卡v9.1在机房的巧妙应用
  8. 新型K4宏病毒代码分析报告
  9. android应用程序开发_如何开始进行Android应用程序开发
  10. 转载+收藏 数理化地生常用软件