我有一个USB条形码扫描仪。我目前正在检测按键是否通过keyups从文本框发送到文本框,方法是让它在发送条形码之前发送一个特殊的组合键。
然而,我想知道是否有其他方法可以做到这一点。
我在KeyEventArgs拍的
private void TextBox_KeyUp(object sender, KeyEventArgs e)
{
this.TextBlock1.Text = e.KeyboardDevice.ToString();
}我以为e.KeyboardDevice可能会给我一些关于哪种“键盘”的信息,比如标准键盘或"usb条形码扫描器键盘“,但我似乎找不到任何这些信息。
我只是在想,可能有一种更好的方法来做这件事,而不是从条形码扫描仪发送特殊的键组合并使用它。

发布于 2016-02-29 13:42:57
我想我会贡献我的解决方案。它不那么优雅,但它只查找数字键按下,然后查看响应所需的时间。如果时间长于最大阈值,那么它将从数组中抛出这些值。我希望这对某些人有帮助。
class BarcodeReader
{
ArrayList barCode = new ArrayList();
ArrayList barCodeTimes = new ArrayList();
ArrayList barCodeDeltaTimes = new ArrayList();
/// <summary>
/// Input 1: delayTime (ms) - time for scanner to return values (threshold)[30 seems good],
/// Input 2: KeyEventArgs - put in key [this.KeyDown += new KeyEventHandler(Form1_KeyDown)],
/// Output 1: String of barcode read
/// </summary>
/// <param name="delayTime"></param>
/// <param name="e"></param>
/// <returns></returns>
public string BarcodeValue(int delayTime, KeyEventArgs e)
{
string barCodeString = null;
var isNumber = e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9;
var rtn = e.KeyCode == Keys.Enter;
if (isNumber)
{
barCode.Add(Encoding.ASCII.GetString(new byte[] { (byte)e.KeyValue }));
barCodeTimes.Add(DateTime.Now.TimeOfDay.TotalMilliseconds);
}
if (rtn)
{
barCodeString = ValuesToString(delayTime);
}
return barCodeString;
}
private string ValuesToString(int delayTime)
{
string barCodeString = null;
foreach (double d in barCodeTimes)
{
double diff = 0;
int index = barCodeTimes.IndexOf(d);
if (index < barCodeTimes.Count - 1)
{
diff = (double)barCodeTimes[index + 1] - (double)barCodeTimes[index];
}
barCodeDeltaTimes.Add(diff);
}
foreach (double d in barCodeDeltaTimes)
{
if (d > delayTime)
{
barCode.RemoveAt(0);
}
}
foreach (string s in barCode)
{
barCodeString += s;
}
barCode.Clear();
barCodeTimes.Clear();
barCodeDeltaTimes.Clear();
return barCodeString;
}
}https://stackoverflow.com/questions/21002657
复制相似问题