1

我正在尝试一个 PoC,我正在尝试根据用户的 HID 卡值对用户进行身份验证。我没有任何特定的 API 供读者使用。读卡器通过键盘模拟输出卡的明码。

PoC 允许用户通过用户名/密码或通过 HID 代理卡进行身份验证。为了简化事情,我想使用一个 hidden来读取来自 HID 的值并从eventTextBox触发相应的 web 服务。TextChanged

我无法这样做。谁能建议如何做到这一点,我对.Net环境很陌生。

4

1 回答 1

2

使用该版本的阅读器设备(具有键盘仿真功能的设备),您将需要某种形式的文本输入控件(例如 TextBox)来捕获虚拟键盘发送的文本。您使用隐藏文本框的方法的问题在于,当虚拟键盘“键入”卡 ID 时,它不会获得焦点。

因此,当您期望卡片 ID 时,您需要在任何具有焦点的 UI 元素中拦截 KeyDown 事件。例如,如果您有一个窗口并且没有 TextBox(或使用 KeyPress 事件的其他元素)具有焦点,您可以尝试在窗口级别拦截 KeyPress 事件:

<Window ...
    KeyDown="onKeyDownHandler"
>

相应的处理程序方法如下所示:

private void onKeyDownHandler(object sender, KeyEventArgs e) {
    // e.Key will give you the pressed key
}

因此,使用此处理程序,您应该能够收集 RFID 阅读器发送的所有虚拟按键。所以你需要做的就是收集它们并将它们翻译成字符。


更新:

产品说明书建议读卡器的虚拟键盘版本可以配置为在卡 ID 前后添加击键。因此,即使焦点位于用户名或密码的文本输入字段上,您也可以通过在卡 ID 之前添加用户名/密码中不能出现的字符/控制键码来检测并屏蔽从该 RFID 阅读器发送的输入. 然后,您可以在两个文本框中拦截 KeyDown 事件,并且在接收到该控制键码后,您可以使用虚拟键盘发送的所有击键。通过用 标记这些击键e.Handled = true;,您应该能够将它们从文本框中隐藏起来。

作为替代方案,您可以使用该阅读器的串行版本(例如 USB 虚拟 COM 端口)。如果这是一个选项...然后您可以通过串行连接而不是虚拟键盘接收卡 ID。因此,您将能够轻松地区分用户输入和 RFID 阅读器输入,因为两者都将到达不同的通信接口。

于 2014-01-15T09:11:57.110 回答