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

📄 mainform.cpp

📁 Microsoft PCSC Example
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "MainForm.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMainForm *frmMainForm;
//---------------------------------------------------------------------------
__fastcall TfrmMainForm::TfrmMainForm(TComponent* Owner)
        : TForm(Owner)
{
  //Fill Cardreaders Names to Combobox
  TSmartCardReader::GetCardListReaders(cobCardReaders->Items);

}
//---------------------------------------------------------------------------

BYTE GetProtocalFromATR(BYTE * pATR, int iATR)
{
    BYTE aByte ;
    BYTE AtrStr = pATR[1]; //T0
    aByte = AtrStr;

}
//Power On /Off Card
void __fastcall TfrmMainForm::btnOnOffClick(TObject *Sender)
{
  if (0 <= cobCardReaders->ItemIndex)
  {
    if (NULL != CardReader)
    {
      delete CardReader;
      CardReader = NULL;
      btnSend->Enabled = false;
      btnOnOff->Caption = "Power On";
      cobCardReaders->Enabled = true;
    }
    else
    {
      CardReader = new TSmartCardReader(cobCardReaders->Items->Strings[cobCardReaders->ItemIndex].c_str());
      AnsiString pATR;
      if (true == CardReader->CardConnect(&pATR))
      {
         btnSend->Enabled = true;
         if (CardReader->m_ActiveProtocol == SCARD_PROTOCOL_T1)
            memMsg->Lines->Add("Protocol:T=1");
         else if (CardReader->m_ActiveProtocol == SCARD_PROTOCOL_T0)
            memMsg->Lines->Add("Protocol:T=0");
         else
            memMsg->Lines->Add("Protocol: Unknow");
         memMsg->Lines->Add("ATR << " + pATR);
         btnOnOff->Caption = "Power Off";
         cobCardReaders->Enabled = false;
      }
      else
      {
        delete CardReader;
        CardReader = NULL;
      }

    }
  }
}
//---------------------------------------------------------------------------

//Send APDU Command to Card
void __fastcall TfrmMainForm::btnSendClick(TObject *Sender)
{
  AnsiString szResponse;
  AnsiString strCMD = edtHexCmd->Text.Trim();
  strCMD = TSmartCardReader::NoSpace(strCMD);
  if (0 != strCMD.Length() % 2)
  {
    return ;
  }
  memMsg->Lines->Add("SND >> " + edtHexCmd->Text.Trim());
  if (CardReader->RunAPDU(strCMD, &szResponse))
      memMsg->Lines->Add("REC << " + szResponse);
  else
      memMsg->Lines->Add("RUN APDU error" + szResponse);
}
//---------------------------------------------------------------------------

//If CardReader is Not Null then Free it ,
//Call CardReleaseContex to Free Card Contex
void __fastcall TfrmMainForm::FormDestroy(TObject *Sender)
{
  if (CardReader != NULL)
    delete CardReader;
  TSmartCardReader::CardReleaseContex();
  HANDLE hmsgMgn = FindWindow("TfrmMsgMgr", NULL);
  if (0 != hmsgMgn)
    SendMessage(hmsgMgn, WM_CLOSE, 0, 0);
}

//---------------------------------------------------------------------------


//---------------------------------------------------------------------------





⌨️ 快捷键说明

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