如果插入智能卡,则 WPF 捕获事件

Posted

技术标签:

【中文标题】如果插入智能卡,则 WPF 捕获事件【英文标题】:WPF Catch event if SmartCard is inserted 【发布时间】:2017-02-13 14:54:13 【问题描述】:

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

【问题讨论】:

这实际上与 WPF 没有任何关系。请参阅此问题及其答案:Smart Card Reader Plugin (Card Inserted) Event 此方案无法在WPF中实现... 这是为什么呢?是什么阻止您在 WPF 中创建类? 我的错误,似乎只有 UWP,我很难相信 【参考方案1】:

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

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

右键单击参考。从上下文菜单中选择“添加引用...”。在参考管理器的左侧,转到浏览并 找到目录“C:Program Files (x86)参考 程序集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);
    

【讨论】:

以上是关于如果插入智能卡,则 WPF 捕获事件的主要内容,如果未能解决你的问题,请参考以下文章

智能卡读卡器插件(插入卡)事件

如何在 C++ 中监听智能卡插入和删除事件?

凭据提供程序 Vista+ 智能卡移除事件

WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件

WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件

WPF 事件来捕获新添加的控件?