16 个解决方案
#1
虽然不知道楼主说什么,但好像很厉害的样子~帮顶了
#2
就是我想要扫描枪中的数据,虽然现在可以获取到,但是只要页面有可输入的文本框或者其他的什么,只要有光标定在那里,扫描枪就会将扫描的数据输入到有光标的文本框中。
我想要的是 只要有扫描枪扫描,我就将扫描的数据直接放到指定页面上的指定文本框中。
我想要的是 只要有扫描枪扫描,我就将扫描的数据直接放到指定页面上的指定文本框中。
#3
扫描枪应该是发的键盘消息吧,拦截下键盘消息试试
#4
持扫描器的人不扫,它怎么输入?
它扫了一个条码,难道是要重复成千上万次地去输入?那么到底是扫了一个条码还是一万个(同样的)条码?
设计一个程序,连先后依赖关系都不懂(不懂得依赖倒置的道理),那么做出的需求描述往往跟编程完全对接不上。
它扫了一个条码,难道是要重复成千上万次地去输入?那么到底是扫了一个条码还是一万个(同样的)条码?
设计一个程序,连先后依赖关系都不懂(不懂得依赖倒置的道理),那么做出的需求描述往往跟编程完全对接不上。
#5
肯定要扫描啊?不扫描数据从哪来?
#6
我可以通过程序获取到按键,但是我测了一下,扫描枪是先将数据输入到你的光标位置,然后才会触发按键比如Enter回车键
#7
SerialPort类,希望可以帮到你。
#8
首先撸主的思路有问题。
条形码扫描抢是输入键盘事件,你可以把它看作一个键盘。
那么问题就变成了你在一个界面上要知道获取键盘IO的输入,你该怎么做?
你的程序进入了扫描环节,那么在这个界面上一定只有输入框能够获取到焦点。这样就不存在你的问题了。
条形码扫描抢是输入键盘事件,你可以把它看作一个键盘。
那么问题就变成了你在一个界面上要知道获取键盘IO的输入,你该怎么做?
你的程序进入了扫描环节,那么在这个界面上一定只有输入框能够获取到焦点。这样就不存在你的问题了。
#9
楼主的问题貌似实现不了,不过可以换个折中的思路,在当前页面中有个默认的回车会触发的按钮,在这个按钮中判断指定的接收扫描或输入条码的文本框是否有内容,如果有则打开新页面并传入条码,并在新页面中根据参数中的条码检索数据,平时接收条码都是在当前的页面中
#10
楼主这个问题,有一种解决方法,
你需要更改条码枪规则,操作方法请看条码枪的说明书(有一本小册子上记录了许多配置条码)
原理: 条码枪每次扫描前让它加上一个前缀字符,你在程序中过滤键盘消息专门拦截这个字符,然后跳到你指定的页面。将拦到的字符串放到textbox中.
否则别无它法 完毕。
你需要更改条码枪规则,操作方法请看条码枪的说明书(有一本小册子上记录了许多配置条码)
原理: 条码枪每次扫描前让它加上一个前缀字符,你在程序中过滤键盘消息专门拦截这个字符,然后跳到你指定的页面。将拦到的字符串放到textbox中.
否则别无它法 完毕。
#11
扫描设备 应该也是有 事件驱动的
在扫描事件里写你需要做的操作呗
在扫描事件里写你需要做的操作呗
#12
是asp.net还是winform,winform好办,
#13
stonespace 老兄,Winform下的话该如何处理呢?
#14
把窗体或页面上的所有能接收键盘事件的控件,将其keydown事件注册到窗体或页面上,然后在窗体或页面上的keydown事件去处理,
#15
已解决此问题,我的做法如下。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Common
{
public partial class FrmMain : Form
{
BardCodeHooK BarCode = new BardCodeHooK();
public FrmMain()
{
InitializeComponent();
BarCode.BarCodeEvent += new BardCodeHooK.BardCodeDeletegate(BarCode_BarCodeEvent);
}
private delegate void ShowInfoDelegate(BardCodeHooK.BarCodes barCode);
private void ShowInfo(BardCodeHooK.BarCodes barCode)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new ShowInfoDelegate(ShowInfo), new object[] { barCode });
}
else
{
textBox1.Text = barCode.KeyName;
textBox2.Text = barCode.VirtKey.ToString();
textBox3.Text = barCode.ScanCode.ToString();
textBox4.Text = barCode.Ascll.ToString();
textBox5.Text = barCode.Chr.ToString();
textBox6.Text = barCode.IsValid? barCode.BarCode : "";//是否为扫描枪输入,如果为true则是 否则为键盘输入
textBox7.Text += barCode.KeyName;
//MessageBox.Show(barCode.IsValid.ToString());
}
}
//C#中判断扫描枪输入与键盘输入
//Private DateTime _dt = DateTime.Now; //定义一个成员函数用于保存每次的时间点
//private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
//{
// DateTime tempDt = DateTime.Now; //保存按键按下时刻的时间点
// TimeSpan ts = tempDt .Subtract(_dt); //获取时间间隔
// if (ts.Milliseconds > 50) //判断时间间隔,如果时间间隔大于50毫秒,则将TextBox清空
// textBox1.Text = "";
// dt = tempDt ;
//}
void BarCode_BarCodeEvent(BardCodeHooK.BarCodes barCode)
{
ShowInfo(barCode);
}
private void FrmMain_Load(object sender, EventArgs e)
{
BarCode.Start();
}
private void FrmMain_FormClosed(object sender, FormClosedEventArgs e)
{
BarCode.Stop();
}
private void textBox6_TextChanged(object sender, EventArgs e)
{
if (textBox6.Text.Length > 0)
{
MessageBox.Show("条码长度:" + textBox6.Text.Length + "\n条码内容:" + textBox6.Text, "系统提示");
}
}
}
}
#16
BardCodeHooK 这个是哪来的?
#1
虽然不知道楼主说什么,但好像很厉害的样子~帮顶了
#2
就是我想要扫描枪中的数据,虽然现在可以获取到,但是只要页面有可输入的文本框或者其他的什么,只要有光标定在那里,扫描枪就会将扫描的数据输入到有光标的文本框中。
我想要的是 只要有扫描枪扫描,我就将扫描的数据直接放到指定页面上的指定文本框中。
我想要的是 只要有扫描枪扫描,我就将扫描的数据直接放到指定页面上的指定文本框中。
#3
扫描枪应该是发的键盘消息吧,拦截下键盘消息试试
#4
持扫描器的人不扫,它怎么输入?
它扫了一个条码,难道是要重复成千上万次地去输入?那么到底是扫了一个条码还是一万个(同样的)条码?
设计一个程序,连先后依赖关系都不懂(不懂得依赖倒置的道理),那么做出的需求描述往往跟编程完全对接不上。
它扫了一个条码,难道是要重复成千上万次地去输入?那么到底是扫了一个条码还是一万个(同样的)条码?
设计一个程序,连先后依赖关系都不懂(不懂得依赖倒置的道理),那么做出的需求描述往往跟编程完全对接不上。
#5
肯定要扫描啊?不扫描数据从哪来?
#6
我可以通过程序获取到按键,但是我测了一下,扫描枪是先将数据输入到你的光标位置,然后才会触发按键比如Enter回车键
#7
SerialPort类,希望可以帮到你。
#8
首先撸主的思路有问题。
条形码扫描抢是输入键盘事件,你可以把它看作一个键盘。
那么问题就变成了你在一个界面上要知道获取键盘IO的输入,你该怎么做?
你的程序进入了扫描环节,那么在这个界面上一定只有输入框能够获取到焦点。这样就不存在你的问题了。
条形码扫描抢是输入键盘事件,你可以把它看作一个键盘。
那么问题就变成了你在一个界面上要知道获取键盘IO的输入,你该怎么做?
你的程序进入了扫描环节,那么在这个界面上一定只有输入框能够获取到焦点。这样就不存在你的问题了。
#9
楼主的问题貌似实现不了,不过可以换个折中的思路,在当前页面中有个默认的回车会触发的按钮,在这个按钮中判断指定的接收扫描或输入条码的文本框是否有内容,如果有则打开新页面并传入条码,并在新页面中根据参数中的条码检索数据,平时接收条码都是在当前的页面中
#10
楼主这个问题,有一种解决方法,
你需要更改条码枪规则,操作方法请看条码枪的说明书(有一本小册子上记录了许多配置条码)
原理: 条码枪每次扫描前让它加上一个前缀字符,你在程序中过滤键盘消息专门拦截这个字符,然后跳到你指定的页面。将拦到的字符串放到textbox中.
否则别无它法 完毕。
你需要更改条码枪规则,操作方法请看条码枪的说明书(有一本小册子上记录了许多配置条码)
原理: 条码枪每次扫描前让它加上一个前缀字符,你在程序中过滤键盘消息专门拦截这个字符,然后跳到你指定的页面。将拦到的字符串放到textbox中.
否则别无它法 完毕。
#11
扫描设备 应该也是有 事件驱动的
在扫描事件里写你需要做的操作呗
在扫描事件里写你需要做的操作呗
#12
是asp.net还是winform,winform好办,
#13
stonespace 老兄,Winform下的话该如何处理呢?
#14
把窗体或页面上的所有能接收键盘事件的控件,将其keydown事件注册到窗体或页面上,然后在窗体或页面上的keydown事件去处理,
#15
已解决此问题,我的做法如下。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Common
{
public partial class FrmMain : Form
{
BardCodeHooK BarCode = new BardCodeHooK();
public FrmMain()
{
InitializeComponent();
BarCode.BarCodeEvent += new BardCodeHooK.BardCodeDeletegate(BarCode_BarCodeEvent);
}
private delegate void ShowInfoDelegate(BardCodeHooK.BarCodes barCode);
private void ShowInfo(BardCodeHooK.BarCodes barCode)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new ShowInfoDelegate(ShowInfo), new object[] { barCode });
}
else
{
textBox1.Text = barCode.KeyName;
textBox2.Text = barCode.VirtKey.ToString();
textBox3.Text = barCode.ScanCode.ToString();
textBox4.Text = barCode.Ascll.ToString();
textBox5.Text = barCode.Chr.ToString();
textBox6.Text = barCode.IsValid? barCode.BarCode : "";//是否为扫描枪输入,如果为true则是 否则为键盘输入
textBox7.Text += barCode.KeyName;
//MessageBox.Show(barCode.IsValid.ToString());
}
}
//C#中判断扫描枪输入与键盘输入
//Private DateTime _dt = DateTime.Now; //定义一个成员函数用于保存每次的时间点
//private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
//{
// DateTime tempDt = DateTime.Now; //保存按键按下时刻的时间点
// TimeSpan ts = tempDt .Subtract(_dt); //获取时间间隔
// if (ts.Milliseconds > 50) //判断时间间隔,如果时间间隔大于50毫秒,则将TextBox清空
// textBox1.Text = "";
// dt = tempDt ;
//}
void BarCode_BarCodeEvent(BardCodeHooK.BarCodes barCode)
{
ShowInfo(barCode);
}
private void FrmMain_Load(object sender, EventArgs e)
{
BarCode.Start();
}
private void FrmMain_FormClosed(object sender, FormClosedEventArgs e)
{
BarCode.Stop();
}
private void textBox6_TextChanged(object sender, EventArgs e)
{
if (textBox6.Text.Length > 0)
{
MessageBox.Show("条码长度:" + textBox6.Text.Length + "\n条码内容:" + textBox6.Text, "系统提示");
}
}
}
}
#16
BardCodeHooK 这个是哪来的?