支持.NET唯一键盘钩子托管代码是一个低级键盘钩(WH_KEYBOARD_LL)。

请参阅使用全局键盘钩子(WH_KEYBOARD_LL)在WPF / C#

我上面的代码在我此刻的应用程序工作,所以,当你刷卡,你会得到所有的按键的列表。问题是打字分隔符如“%”和“;”它将给我ALT +数字键盘+? WPF键对象对应于这些码元。

我的问题:是否有某种方式使这个操作起来更高层,也就是捕获所有的键盘命令生成的字符串

干杯!

有帮助吗?

解决方案

不知道这是怎么回事,但得到像一个%字符出一个键盘钩子是非常untrivial。钩子仅通知您的虚拟键。但是,%是一个打字键,通过我的键盘(美国布局)上按Shift + 5生产。视窗通常通过处理WM_KEYDOWN / UP消息,生成用于打字密钥的WM_CHAR消息产生这些字符。那不是你的情况发生。低级别的Windows函数,它这是ToUnicodeEx()。

其他提示

如果你刷卡我猜想,还有的WPF表单上输入的地方,例如像一个文本框?然后,我会倾向于添加事件,也许keyUp事件处理程序,(键盘楔卡扫描仪无法发送一个结束处理信号如ENTER来表示刷卡成功了是吗?),在KeyUp事件处理程序,使用的StringBuilder建立一个串,并且当信号如ENTER落入处理结束,则可以删除该“%”和“;”从StringBuilder实例,做任何你用它做。

有可能更容易当KeyUp事件处理程序接收一个“%”来使用的状态下系统,然后进入另一状态,其中端部预期的状态将是一个“;”

static bool StartState = false;
StringBuilder sbInput = new StringBuilder();
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
   if (!StartState){
    if (e.KeyCode == Keys.D5) StartState = true;
    sbInput.Append((char)e.KeyValue);
   }else{
    if (e.KeyCode == Keys.OemSemicolon){
       StartState = false;
       // sbInput will contain the data from the scanner,
       // copy it somewhere else and reset sbInput
       // sbInput.Remove(0, sbInput.Length); 
    }
    sbInput.Append((char)e.KeyValue);
   }
   e.Handled = true;
}

希望这有助于 最好的祝福, 汤姆。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top