【问题标题】:Method replys unplugged NFC readers方法回复拔出的 NFC 阅读器
【发布时间】:2016-05-20 13:52:14
【问题描述】:

我目前使用 pcsc-sharp 从 NFC 标签中读取 id。我得到了这个方法来列出所有可用的读者。但这回答了我曾经使用过的所有读者。还列出了未插入的老读者。有谁知道如何解决这个问题?

public void SelectDevice()
        {
            List<string> availableReaders = this.ListReaders();
            this.RdrState = new Card.SCARD_READERSTATE();
            readername = availableReaders[0].ToString();
            this.RdrState.RdrName = readername;
        }


public List<string> ListReaders()
            {
                int ReaderCount = 0;
                List<string> AvailableReaderList = new List<string>();

                retCode = Card.SCardListReaders(hContext, null, null, ref ReaderCount);
                if (retCode != Card.SCARD_S_SUCCESS)
                {
                    MessageBox.Show(Card.GetScardErrMsg(retCode));
                }

                byte[] ReadersList = new byte[ReaderCount];
                retCode = Card.SCardListReaders(hContext, null, ReadersList, ref ReaderCount);
                if (retCode != Card.SCARD_S_SUCCESS)
                {
                    MessageBox.Show(Card.GetScardErrMsg(retCode));
                }
                string rName = "";
                int indx = 0;
                if (ReaderCount > 0)
                {
                while (ReadersList[indx] != 0)
                {
                while (ReadersList[indx] != 0)
                {
                    rName = rName + (char)ReadersList[indx];
                    indx = indx + 1;
                }
                AvailableReaderList.Add(rName);
                rName = "";
                indx = indx + 1;
            }
        }
        return AvailableReaderList;
    }

【问题讨论】:

    标签: c# .net nfc reader pcsc


    【解决方案1】:

    好的,我想我解决了这个问题。不知道这是否是最好的方法,但它有效。我也不知道为什么 ListReaders() 方法会为我提供我曾经使用过的所有阅读器,但我找到了另一种方法来获取当前插入的阅读器的阅读器名称。

    public void SelectDevice()
            {
                string[] readerNames = new string[1];
                using (var context = new SCardContext())
                {
                    context.Establish(SCardScope.System);
                    readerNames = context.GetReaders();
                }
                readername = readerNames[0];
                this.RdrState.RdrName = readername;
            }
    

    如果有更好的方法,或者有人知道我为什么让所有读者都使用,请发表评论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多