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

📄 pcscdlg.cpp

📁 同方PC读卡器驱动
💻 CPP
📖 第 1 页 / 共 2 页
字号:
         If Lin=Lex=0, the P3 byte is not send.
------------------------------------------------------------------------------*/
	/*
    if ((nLenIn == 0) && (nLenOut == 0))
    {
		dwLengthIn = 4;
	}
	else
	{
		if (nLenOut == 0)
		{
			dwLengthIn--;
		}
	}
    if ((nLenIn == 0) && (nLenOut == 0))
    {
		szDataIn[dwLengthIn++] = 0;
	}
    if ( ( dwProtocol == SCARD_PROTOCOL_T1) && ( nLenOut==0 ) ) 
	{
		szDataIn[dwLengthIn++] = 0;
	}
	*/
	CString sIn="Command=>> " ,sInTemp;
	int i=0 ;
	for (i=0;i<dwLengthIn;i++)
	{
		sInTemp.Format("%02X ",szDataIn[i]);
		sIn = sIn + sInTemp;
	}
	m_list.AddString(sIn); 


	// For testing only 
	// memcpy( szDataIn, "\x00\xA4\x00\x00\x02\x3F\x00", 7 ) ;
	// dwLengthIn = 7 ;

	dwLengthOut = 200;
    ScardIoRequest.dwProtocol = dwProtocol;
    ScardIoRequest.cbPciLength = sizeof(ScardIoRequest);

    lRet = SCardTransmit(hCard, &ScardIoRequest, szDataIn, dwLengthIn, NULL, szDataOut, &dwLengthOut);
         
	CString sLret,sOut=">> " ,sTemp;
		
	sLret.Format("Status: %02Xh",lRet);
	m_list.AddString(sLret);

	if ((lRet == SCARD_S_SUCCESS) && (dwLengthOut >0))
	{
		sLret.Format("Card response(%d):  ",dwLengthOut);
		m_list.AddString(sLret); 
		for (dwIndex=0;dwIndex<dwLengthOut;dwIndex++)
		{
			sTemp.Format("%02X ",szDataOut[dwIndex]);
			sOut = sOut + sTemp;
		}
		m_list.AddString(sOut); 
	}
	int nCount = m_list.GetCount(); 
	m_list.SetCurSel(nCount-1); 
}

void CPCSCDlg::OnSetfocusEdit7() 
{
	// TODO: Add your control notification handler code here
	int nLen = m_DataIn.GetWindowTextLength(); 
	int n,l;
    n= nLen; 
	l= nLen;
	m_DataIn.SetSel(n,l,FALSE);
}

void CPCSCDlg::OnChangeEdit7() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	int nLen = m_DataIn.GetWindowTextLength(); 
	int n,l;
	CString sLen, sOut, space, sText;
	m_Lc.GetWindowText(sText);
	nData = atoi(sText);
	n=nLen; 
	l=nLen;
	m_DataIn.SetSel(n,l,FALSE);
	m_DataIn.GetWindowText(sLen); 
	space.Format(" "); 
	sOut = sLen + space;
	switch(nLen)
	{
	case 2:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 5:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 8:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 11:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 14:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 17:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 20:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 23:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 26:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 29:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 32:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 35:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 38:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 41:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 44:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 47:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 50:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 53:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	case 56:
		m_DataIn.SetWindowText(sOut);
		n=nLen + 2;
		l=nLen + 2;
		m_DataIn.SetSel(n,l,FALSE);
		break;
	}
	if (nLen > 57)
	{
		
		n=58;
		l=58;
		m_DataIn.SetSel(0,nLen,FALSE);
		m_DataIn.Cut(); 
	}

}


void CPCSCDlg::OnEject() 
{
	// TODO: Add your control notification handler code here
	m_rlist.ResetContent();
	m_list.ResetContent();
	lRet = SCardDisconnect(hCard,SCARD_LEAVE_CARD);
	lRet = SCardDisconnect(hCard,SCARD_EJECT_CARD );
   

	/*------------------------------------------------------------------------------
		Close the establish context with the ICC Resource Manager.
	------------------------------------------------------------------------------*/
	lRet = SCardReleaseContext(hContext);	
	int nCount = m_list.GetCount(); 
	m_list.SetCurSel(nCount-1); 

}

void CPCSCDlg::OnRefresh() 
{
	dwAtrLength = 32;
	CString sTemp;
	
	CPCSCDlg::OnEject(); 
	
	m_list.ResetContent(); 
	/*------------------------------------------------------------------------------
	Establish a context with the ICC Resource Manager.
    ------------------------------------------------------------------------------*/
	lRet = SCardEstablishContext(SCARD_SCOPE_USER, NULL, NULL, &hContext);
	sTemp.Format("SCardEstablishContext : %Xh",lRet);
	m_list.AddString(sTemp);

	if (lRet != SCARD_S_SUCCESS)
	{
       AfxMessageBox("SCardEstablishContext failed");
       CPCSCDlg::OnOK();
	   return;
	}

	/*------------------------------------------------------------------------------
	Allocate the size to read the list of the readers
	Get the list of readers.
	------------------------------------------------------------------------------*/
	lRet = SCardListReaders(hContext, NULL, NULL, &dwReadersLength);
    sTemp.Format("SCardListReaders: %Xh",lRet);
	m_list.AddString(sTemp);
	if (lRet != SCARD_S_SUCCESS)
	{
		AfxMessageBox("SCardListReaders failed");
		CPCSCDlg::OnOK();
		return;
	}
   
	szListReaders = (LPSTR)malloc(dwReadersLength);
	lRet = SCardListReaders(hContext, NULL, (LPTSTR)szListReaders, &dwReadersLength);
    sTemp.Format("SCardListReaders: %Xh",lRet);
	m_list.AddString(sTemp);
	if (lRet != SCARD_S_SUCCESS)
	{
		AfxMessageBox("SCardListReaders failed");
		CPCSCDlg::OnOK();
		return;
	}
    // List the available reader
	dwIndex = 0;
	dwReader = 0;
	szFirstReader = (LPTSTR)szListReaders;
	//rbuffer[0] = 0;
	while (*(szFirstReader) != '\0')
	{
		sTemp.Format("%d:<%s>",(dwReader + 1),szFirstReader);
		dwIndex += strlen(szFirstReader) + 1;
		szFirstReader = (LPTSTR)(szListReaders + dwIndex);
		dwReader++;
		m_rlist.AddString(sTemp);
	}
	if (dwReader != 0)
	{
		m_list.AddString("Please select the reader");
	}
	else m_list.AddString("No reader available");
	int nCount = m_list.GetCount(); 
	m_list.SetCurSel(nCount-1); 

	return;
}

BYTE CPCSCDlg::AscToByte(char asc)
{
	switch ( asc )
	{
	case '0': return 0x00 ;
	case '1': return 0x01 ;
	case '2': return 0x02 ;
	case '3': return 0x03 ;
	case '4': return 0x04 ;
	case '5': return 0x05 ;
	case '6': return 0x06 ;
	case '7': return 0x07 ;
	case '8': return 0x08 ;
	case '9': return 0x09 ;
	case 'A': return 0x0a ;
	case 'B': return 0x0b ;
	case 'C': return 0x0c ;
	case 'D': return 0x0d ;
	case 'E': return 0x0e ;
	case 'F': return 0x0f ;
	default: return 0; 
	}
	return 0 ;
}

⌨️ 快捷键说明

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