none
想請問多個讀卡機同時在系統時,如何取得讀卡機列表 已爬文 RRS feed

  • 問題

  • 引用

    http://social.msdn.microsoft.com/forums/zh-tw/233/thread/0A479A17-78F9-4384-9A62-23EC7535B569

    底下解答自己測試不行所以在此提問

    目前宣告是

    [DllImport("WinScard.dll")]
    
    public static extern int SCardListReaders(int hContext, string mszGroups,ref string cReaderLists, ref int pcchReaders);
     //列出可用的 Smart Card 讀卡機
    if (SCardListReaders(hContext, null, ref  ReaderList, ref pcchReaders) == 0) 
    {
      MessageBox.Show(ReaderList);  
    }

    ReaderList是有出現第一台的名稱Generic Smart Card Reader Interface 0

    pcchReaders是39

    收詢了很多資料 都無法解決如何讓第2個出現的這個問題 

    所以在此麻煩先進的大大了

    感謝

    使用是c# 2010
    • 已編輯 Low哥 2012年11月26日 下午 01:36
    2012年11月26日 下午 01:35

解答

  • 有錯誤是指?

    你有先執行

    ret = SCardListReaders(hContext,IntPtr.Zero,null,ref pcchReaders);  

    去取得總長度嗎?

    有看到 底下這行註解嗎?
    //remember that readers is a multistring with a double trailing \0 
    不就說明了後面會接兩個\0


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年11月27日 上午 02:39

所有回覆

  • 解答宣告的 參數型別跟你宣告的參數型別 明顯不同...........

    一個是byte[] 一個是string

    你有試過解答所宣告的方式嗎?


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年11月26日 下午 01:46
  • 感謝 Alex_Lee回答

    有試過解答的方式   

    我貼的只是我目前的寫法

    因為解答上有錯誤所以我就沒參照他的寫法

    解答錯誤方面我也有依照他的錯誤  去google尋找

    尋找的資源卻少的不能再少

    才發現c#多個讀卡機很像很少人討論

    令小弟不解的是ReaderList儲存的是第一個 pcchReaders也是39

    如果照正常的話 pcchReaders 不應該是所有本機上讀卡機裝置名稱的長度取出嗎?

    Generic Smart Card Reader Interface 0 算算也有37個字  剩餘2個字 應該不是第2個讀卡裝置的名稱吧

    以上是小弟的不解  感謝

    2012年11月26日 下午 01:55
  • 您好,
    以下有相關的訊息提供給您參考,希望對您有幫助,謝謝!
    Monitoring a Smartcard Reader

    PCSC那事儿(十六--SCardListReaders)


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已編輯 亂馬客 2012年11月27日 上午 01:42
    2012年11月27日 上午 01:38
  • 有錯誤是指?

    你有先執行

    ret = SCardListReaders(hContext,IntPtr.Zero,null,ref pcchReaders);  

    去取得總長度嗎?

    有看到 底下這行註解嗎?
    //remember that readers is a multistring with a double trailing \0 
    不就說明了後面會接兩個\0


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年11月27日 上午 02:39
  •    static string[] ListReaders()
            {
                int ReaderSize = 0;  
           SCardListReaders(ContextHandle, null, null, ref ReaderSize);
    
    
                byte[] ReaderBytes = new byte[ReaderSize];
    SCardListReaders(ContextHandle, null, ReaderBytes, ref ReaderSize);
               
                string[] ReaderList = Encoding.ASCII.GetString(ReaderBytes).Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
                return ReaderList;
            }


    • 已編輯 dodolon 2012年11月28日 上午 11:34
    2012年11月28日 上午 11:33
  • 抱歉  結果是獨卡機錯誤  = ="

    新的讀卡機要等到下禮拜才送來  

    那時有問題再來提問  真是不好意思 辛苦大家了

    2012年12月1日 下午 12:30
  • 抱歉  結果是獨卡機錯誤  = ="

    新的讀卡機要等到下禮拜才送來  

    那時有問題再來提問  真是不好意思 辛苦大家了


    2012年12月1日 下午 12:30
  • 抱歉  結果是獨卡機錯誤  = ="

    新的讀卡機要等到下禮拜才送來  

    那時有問題再來提問  真是不好意思 辛苦大家了

    2012年12月1日 下午 12:30