如果插入了SmartCard,则为WPF Catch事件

时间:2017-02-13 14:54:13

标签: c# wpf smartcard catel

如果我在我的设备上的智能卡读卡器中插入卡。我想在我的WPF项目中触发一个事件。有什么想法来实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

这个问题是前一段时间,但我可以确认是可能的。您可以引用UWP程序集。 Calling Windows 10 APIs From a Desktop Application详细说明了如何添加引用。

  

右键单击参考。从上下文中选择“添加引用...”   菜单。在参考管理器的左侧,选择浏览并找到   以下文件:C:Program Files(x86)Windows Kits10UnionMetadatawinmd。   将其添加到您的项目中作为参考。注意:您需要进行更改   过滤到“所有文件”。

     

右键单击参考。从上下文菜单中选择“添加引用...”。在参考管理器的左侧,转到浏览并   找到目录“ C:Program Files(x86)Reference”   组装MicrosoftFramework.NETCorev4.5”。加   将System.Runtime.WindowsRuntime.dll添加到您的项目。

从那里开始,我跟随这个示例Getting all Cards,简单地剪切和粘贴主要部分。有了阅读器后,您就可以添加Card Added Event

                string selector = SmartCardReader.GetDeviceSelector();
                DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(selector);

                foreach (DeviceInformation device in devices)
                {
                    SmartCardReader reader = await SmartCardReader.FromIdAsync(device.Id);

                    // For each reader, we want to find all the cards associated
                    // with it.  Then we will create a SmartCardListItem for
                    // each (reader, card) pair.
                    IReadOnlyList<SmartCard> cards = await reader.FindAllCardsAsync();

                    foreach (SmartCard card in cards)
                    {
                        SmartCardProvisioning provisioning = await SmartCardProvisioning.FromSmartCardAsync(card);

                        SmartCardListItem item = new SmartCardListItem()
                        {
                            ReaderName = card.Reader.Name,
                            CardName = await provisioning.GetNameAsync()
                        };

                        cardItems.Add(item);
                    }
}