Knowledge Base Nr: 00154 chipdrive.cpp - http://www.swe-kaiser.de
Downloads:
Win32: Towitoko Chipdrive Kartenleser auslesen
/*
MicroChip Treiber Installation:
-------------------------------
www.towitoko.de:
- nur Win95/98/NT/Me: v21441pcsc.zip installieren
- Windows 2000/XP: v21441.zip installieren
ACHTUNG: Zumindestens unter Win2000 kann es nach der Installation zu Problemen mit
der USB Schnittstelle kommen!!!
ACHTUNG: Zumindestens unter Win2000 kann es nach der Installation zu Problemen
mit dem Gerätemanager kommen!!!
*/
#include "CardServer.h"
class CMyCardServer : public CCardServer
{
public:
CMyCardServer():CCardServer() {}
protected:
virtual void OnStatusChanged();
BOOL GetCardInfo(CString& strName, CString& strPassword);
};
CMyCardServer* g_pCardServer = NULL;
void CMyCardServer::OnStatusChanged()
{
CString strLog;
CCardServer::GetStatusText(strLog);
g_nErr = CCardServer::GetStatus();
switch (g_nErr)
{
case MsgActive: //150 Karte bereit
{
//Chipkarte auslesen
CString strName, strPassword;
if (GetCardInfo(strName, strPassword))
{
strcpy(g_szUser, strName);
strcpy(g_szPWD, strPassword);
strcpy(g_szError, "OK!");
g_nErr = 0;
}
else
{
strcpy(g_szUser, "ERROR: Chipkarte hat illegale Daten!");
strcpy(g_szPWD, "ERROR: Chipkarte hat illegale Daten!");
strcpy(g_szError, "ERROR: Chipkarte hat illegale Daten!");
}
}
break;
case MsgWait: //110 Warten auf Karte
strcpy(g_szUser, "Keine Karte!");
strcpy(g_szPWD, "Keine Karte!");
strcpy(g_szError, "Keine Karte!");
g_nErr = 0;
break;
case MsgError: //100 Warten auf Karte
strcpy(g_szUser, "ERROR: kein Gerät!");
strcpy(g_szPWD, "ERROR: kein Gerät!");
strcpy(g_szError, "ERROR: kein Gerät!");
break;
case MsgDetect: //120 Karte einlesen...
strcpy(g_szUser, "Karte erkannt/lesen...!");
strcpy(g_szPWD, "Karte erkannt/lesen...!");
strcpy(g_szError, "Karte erkannt/lesen...!");
break;
default:
strcpy(g_szUser, "ERROR: unknown Error!");
strcpy(g_szPWD, "ERROR: unknown Error!");
strcpy(g_szError, "ERROR: unknown Error!");
}
}
BOOL CMyCardServer::GetCardInfo(CString& strName, CString& strPassword)
{
strName = strPassword = "";
char buf[2048];
DWORD dwResult = SCardCommand("Card,MemRead", NULL, 0, buf, sizeof(buf));
if (dwResult != MAXDWORD)
{
CString strData(buf);
int nTrennPos = strData.FindOneOf(DELIMITER);
if (nTrennPos > 0)
{
strName = strData.Left(nTrennPos);
strPassword = strData.Mid(nTrennPos + 1);
int nTrennPos = strPassword.FindOneOf(DELIMITER);
if (nTrennPos > 0)
strPassword = strPassword.Left(nTrennPos);
return TRUE;
}
}
return FALSE;
}
//////////////////////////////////////////////////////////////////////////////////////
//wenn das applikationsfenster erzeugt ist:
g_pCardServer = new CMyCardServer();
if (g_pCardServer == NULL)
return;
g_pCardServer->CreateCallback();
g_nErr = g_pCardServer->GetStatus();