目标:我需要使用HID Omnikey智能卡读卡器获取HID智能卡的UID(唯一ID)。不幸的是,我无法弄清楚如何使用PCSC(pcsc-sharp.dll)来做到这一点。因此,我寻找替代方案,我找到了cardwerk。
我是.NET的新手,我正在测试智能卡示例代码,我找到了智能卡dll的评估版。
ArrayList m_vsReaderNames = new ArrayList();
private void InitializeSmartCardSystem()
{
if (m_aCardResourceManager == null)
{
m_aCardResourceManager = new SCardResourceManager();
if (!m_aCardResourceManager.EstablishContext(SCardContextScope.User))
{
MessageBox.Show("SCardResourceManager.EstablishContext failed!");
Application.Exit();
}
m_aCardResourceManager.ListReaders(m_vsReaderNames);
if (m_vsReaderNames.Count == 0)
{
MessageBox.Show("SCardResourceManager.ListReaders did not find any card readers!");
Application.Exit();
}
}
}
这个m_aCardResourceManager.ListReaders(m_vsReaderNames); part检索以下智能卡信息。
[0] "H" object {string}
[1] "I" object {string}
[2] "D" object {string}
[3] " " object {string}
[4] "O" object {string}
[5] "M" object {string}
[6] "N" object {string}
[7] "I" object {string}
[8] "K" object {string}
[9] "E" object {string}
[10]"Y" object {string}
[11]" " object {string}
[12]"5" object {string}
由于上面代码中的m_vsReaderNames变量中没有indexID,我遇到一个错误,指出Index超出了数组的范围。
此外,我不想使用arraylist值,而是希望字符串值等于“HID OMNIKEY 5”,它将显示在附件上显示的组合框中。!
有关完整的示例代码,请参阅http://smartcard-api.com/download.shtml。
答案 0 :(得分:0)
我不完全确定你在问什么。听起来你想将这些值加入一个字符串?这是你可以做到的一种方式。
var myString = string.Join("", m_vsReaderNames);
//myString now holds: "HID OMNIKEY 5"