⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 自己编写的一个IC卡读卡工具,用于读取卡内资料.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <StrUtils.hpp>
#pragma hdrstop

#include "Main.h"
#include "RegIC.h"
#include "test.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SUIButton"
#pragma link "SUIComboBox"
#pragma link "SUIEdit"
#pragma link "SUIGroupBox"
#pragma link "SUIImagePanel"
#pragma resource "*.dfm"
TFrmMain *FrmMain;
HINSTANCE m_hDLL;

unsigned long snr;
unsigned short type;
unsigned char size;
unsigned char data[16];
unsigned char szpwd[6]={0xff,0xff,0xff,0xff,0xff,0xff};

//---------------------------------------------------------------------------
__fastcall TFrmMain::TFrmMain(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFrmMain::FormCreate(TObject *Sender)
{
    m_hDLL = LoadLibrary("RC500USB.dll");//打开动态库

    //取得函数地址
    (FARPROC &)RC500USB_init = GetProcAddress(m_hDLL,"RC500USB_init");
    (FARPROC &)RC500USB_exit = GetProcAddress(m_hDLL,"RC500USB_exit");

    (FARPROC &)RC500USB_request = GetProcAddress(m_hDLL,"RC500USB_request");
    (FARPROC &)RC500USB_anticoll = GetProcAddress(m_hDLL,"RC500USB_anticoll");
    (FARPROC &)RC500USB_anticoll2 = GetProcAddress(m_hDLL,"RC500USB_anticoll2");
    (FARPROC &)RC500USB_select = GetProcAddress(m_hDLL,"RC500USB_select");
    (FARPROC &)RC500USB_authentication = GetProcAddress(m_hDLL,"RC500USB_authentication");
    (FARPROC &)RC500USB_authentication2 = GetProcAddress(m_hDLL,"RC500USB_authentication2");
    (FARPROC &)RC500USB_authkey = GetProcAddress(m_hDLL,"RC500USB_authkey");
    (FARPROC &)RC500USB_halt = GetProcAddress(m_hDLL,"RC500USB_halt");
    (FARPROC &)RC500USB_read = GetProcAddress(m_hDLL,"RC500USB_read");
    (FARPROC &)RC500USB_write = GetProcAddress(m_hDLL,"RC500USB_write");
    (FARPROC &)RC500USB_writeval = GetProcAddress(m_hDLL,"RC500USB_writeval");
    (FARPROC &)RC500USB_readval = GetProcAddress(m_hDLL,"RC500USB_readval");
    (FARPROC &)RC500USB_value = GetProcAddress(m_hDLL,"RC500USB_value");
    (FARPROC &)RC500USB_load_key = GetProcAddress(m_hDLL,"RC500USB_load_key");
    (FARPROC &)RC500USB_reset = GetProcAddress(m_hDLL,"RC500USB_reset");
    (FARPROC &)RC500USB_close = GetProcAddress(m_hDLL,"RC500USB_close");
    (FARPROC &)RC500USB_config = GetProcAddress(m_hDLL,"RC500USB_config");
    (FARPROC &)RC500USB_get_info = GetProcAddress(m_hDLL,"RC500USB_get_info");
    (FARPROC &)RC500USB_set_control_bit = GetProcAddress(m_hDLL,"RC500USB_set_control_bit");
    (FARPROC &)RC500USB_clr_control_bit = GetProcAddress(m_hDLL,"RC500USB_clr_control_bit");
    (FARPROC &)RC500USB_buzzer = GetProcAddress(m_hDLL,"RC500USB_buzzer");
    (FARPROC &)RC500USB_read_E2 = GetProcAddress(m_hDLL,"RC500USB_read_E2");
    (FARPROC &)RC500USB_write_E2 = GetProcAddress(m_hDLL,"RC500USB_write_E2");

    StatusBar->Panels->Items[0]->Text = "未连接...";
}
//---------------------------------------------------------------------------
void __fastcall TFrmMain::FormClose(TObject *Sender, TCloseAction &Action)
{
    RC500USB_exit();
    FreeLibrary(m_hDLL);//释放动态库句柄
}
//---------------------------------------------------------------------------
void __fastcall TFrmMain::BtnReadClick(TObject *Sender)
{
//    unsigned long snr;
//    unsigned short type;
//    unsigned char size;
//    unsigned char data[16];
//    unsigned char szpwd[6]={0xff,0xff,0xff,0xff,0xff,0xff};
//
//    if(RC500USB_request (1,type)!=0) 		//对读卡器进行操作
//    {
//        ShowMessage("感应区内没有卡");
//        return;
//    }
//
//	if(RC500USB_anticoll(0,snr)!=0)			//进行防碰撞选择,成功则返回卡号
//    {
//        ShowMessage("防碰撞错误");
//        return;
//    }
//
//	if(RC500USB_select(snr,size)!=0)		//选择卡
//    {
//        ShowMessage("选择卡错误");
//        return;
//    }

    if (CmbFan->Text.Trim()=="")
    {
        ShowMessage("请选择扇区!");
        return;
    }
    if (CmbBlock->Text.Trim()=="")
    {
        ShowMessage("请选择区块!");
        return;
    }

    if (!QueryCard()) return;

    int iFan(0),iBlock(0);
    AnsiString s;
    iFan = CmbFan->ItemIndex ;
    iBlock = CmbBlock->ItemIndex ;
    MemResult->Clear();

    if(RC500USB_authkey(0,szpwd,iFan)!=0)
    {
        ShowMessage("验证错误");
        return;
    }

    if (iBlock == 4)
    {
        for (int x=0;x!=4;++x)
        {
            if(RC500USB_read(iFan*4+x,data)!=0)
            {
                ShowMessage("读取数据错误");
                return;
            }
            s="";
            for(int i=0;i!=16;++i)
            {
                s=s+IntToHex((int)data[i],2)+" ";
            }
            MemResult->Lines->Add("读出 扇区:" + IntToStr(iFan) + "  块:" + IntToStr(x) + "    数据如下:");
            MemResult->Lines->Add(s);
        }

    }
    else
    {
        if(RC500USB_read(iFan*4+iBlock,data)!=0)
        {
            ShowMessage("读取数据错误");
            return;
        }
        s="";
        for(int i=0;i!=16;++i)
        {
            s=s+IntToHex((int)data[i],2)+" ";
        }
        MemResult->Lines->Add("读出 扇区:" + IntToStr(iFan) + "  块:" + IntToStr(iBlock) + "    数据如下:");
        MemResult->Lines->Add(s);
    }
    RC500USB_halt();    //挂起
}
//---------------------------------------------------------------------------
void __fastcall TFrmMain::BtnWriteClick(TObject *Sender)
{
//    unsigned long snr;
//    unsigned short type;
//    unsigned char size;
//    unsigned char data[16];
//    unsigned char szpwd[6]={0xff,0xff,0xff,0xff,0xff,0xff};
    if (CmbWriteFan->Text.Trim()=="")
    {
        ShowMessage("请选择扇区!");
        return;
    }
    if (CmbWriteBlock->Text.Trim()=="")
    {
        ShowMessage("请选择区块!");
        return;
    }


    AnsiString s;
    int j=0;
    s=Edit16->Text.Trim();
    setmem(data,16,0);
    if (s.Length()!=47)
    {
        ShowMessage("格式不对!");
        return;
    }
    for (int i=0;i!=48;i+=3)
    {
        if (s.c_str()[i]==NULL ||
            s.c_str()[i+1]==NULL)
        {
            ShowMessage("格式不对!");
            return;
        }

        data[j]=StrToInt("0x"+s.SubString(i+1,2));
        j++;

        if ((i+2) >=47) break;
        if (s.c_str()[i+2]!=' ')
        {
            ShowMessage("格式不对!");
            return;
        }
    }



    if (CmbWriteBlock->Text.Trim() == "3")
    {
        int iBox;
        iBox=Application->MessageBox("此块为密钥块,确认进行修改吗?","询问",MB_YESNO+MB_ICONQUESTION);
        if (iBox == IDNO) return;
    }

    if (!QueryCard()) return;







//    TEdit *p;
//    AnsiString s,Str;
//    int j(0),x(0);
//    for (int i=0;i!=GroupBox1->ControlCount;++i)
//    {
//        if(GroupBox1->Controls[i]->ClassNameIs("TEdit"))
//        {
//            p=dynamic_cast<TEdit *>(GroupBox1->Controls[i]);
//            s=s+p->Text+" ";
//            Str = "0x"+p->Text;
//            x = Str.ToInt();
//            data[j] = x;
//            j++;
//        }
//    }


//    for(int i=0;i<16;i++)
//    {
//        data[i]=i;
//    }

//    if(RC500USB_request (1,type)!=0) 		//对读卡器进行操作
//    {
//        ShowMessage("感应区内没有卡");
//        return;
//    }
//
//
//	if(RC500USB_anticoll(0,snr)!=0)			//进行防碰撞选择,成功则返回卡号
//    {
//        ShowMessage("防碰撞错误");
//        return;
//    }
//
//	if(RC500USB_select(snr,size)!=0)		//选择卡
//    {
//        ShowMessage("选择卡错误");
//        return;
//    }

    int iFan(0),iBlock(0);
    iFan = CmbWriteFan->ItemIndex ;
    iBlock = StrToInt(CmbWriteBlock->Text) ;


    if(RC500USB_authkey(0,szpwd,iFan)!=0)
    {
        ShowMessage("验证错误");
        return;
    }

    MemResult->Clear();

    if(RC500USB_write(iFan*4+iBlock,data)!=0)
    {
        ShowMessage("写入数据错误");
        return;
    }
    MemResult->Lines->Add("写入 扇区:" + IntToStr(iFan) + "  块:" + IntToStr(iBlock) + "    数据如下:");
    MemResult->Lines->Add(s);


    RC500USB_halt();    //挂起
}
//---------------------------------------------------------------------------
void __fastcall TFrmMain::FormShow(TObject *Sender)
{
    CmbFan->Items->Clear();
    CmbWriteFan->Items->Clear();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -